Project

General

Profile

Actions

Bug #18565

closed

strptime reports invalid date when string is "130AM" and format string is '%I:%M%p'

Added by CaryInVictoria (Cary Swoveland) about 2 years ago. Updated about 2 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:107426]

Description

DateTime.strptime("1:30PM", '%I:%M%p') and DateTime.strptime("1:30PM", '%l:%M%p') both return
#<DateTime: 2022-02-01T13:30:00+00:00 ((2459612j,48600s,0n),+0s,2299161j)>

DateTime.strptime("130PM", '%I%M%p') and DateTime.strptime("130PM", '%l%M%p')
both raise the exception Date::Error: invalid date

I don't understand why an exception should be raised when the string is "130PM". Is this a bug?

Updated by jeremyevans0 (Jeremy Evans) about 2 years ago

  • Status changed from Open to Rejected

I don't think this is a bug. strptime is supposed to be the inverse of strftime:

DateTime.now.strftime('%I%M%p')
# => "0617PM"
DateTime.now.strftime('%l%M%p')
# => " 617PM"

If you pass the same formats to strptime, it will work correctly:

DateTime.strptime("0130PM", '%I%M%p')
# => #<DateTime: 2022-02-01T13:30:00+00:00 ((2459612j,48600s,0n),+0s,2299161j)>
DateTime.strptime(" 130PM", '%l%M%p')
# => #<DateTime: 2022-02-01T13:30:00+00:00 ((2459612j,48600s,0n),+0s,2299161j)>

The fact that 1: works with the %I/%l formats is due to implementation details, not by design, and should not be relied on.

Actions

Also available in: Atom PDF

Like0
Like0