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