Actions
Bug #18565
closedstrptime reports invalid date when string is "130AM" and format string is '%I:%M%p'
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) almost 3 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
Like0
Like0