Python 如果比较两个时间,例如 12:00 和 11:59,则日期时间比较不正确
Python datetime comparison is incorrect in case of compare two time like: 12:00 and 11:59
所以下面的代码示例:
>>> from datetime import datetime
>>> future = datetime.strptime('12:00', '%I:%M')
>>> past = datetime.strptime('11:59', '%I:%M')
>>> future < past
>>> True # expected False, because '12:00' > '11:59'
>>> past_2 = datetime.strptime('11:58', '%I:%M')
>>> past < past_2
>>> False
为什么日期时间比较操作 returns True 而不是 False?
strptime 在这种情况下将“12:00”映射到午夜......格式说明符 %I "means": "Hour (12-hour clock) as a zero-padded decimal number."
%I
是十二小时制的小时数。除非您提供 AM 或 PM (%p
),否则它会选择 AM。 12:00 上午(即午夜)早于 11:59 上午。
如果您使用 %H
,您将获得 24 小时制,其中 12:00 将是中午而不是午夜。
https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
这里的问题是12:00
你的意思。打印出有问题的日期时间可能有助于您理解:
future, past, past_2
的值为:
(datetime.datetime(1900, 1, 1, 0, 0),
datetime.datetime(1900, 1, 1, 11, 59),
datetime.datetime(1900, 1, 1, 11, 58))
如您所见,12:00 被解释为当天的 start,而 11:59
被解释为接近中午,即 11 小时59 分钟后。
所以下面的代码示例:
>>> from datetime import datetime
>>> future = datetime.strptime('12:00', '%I:%M')
>>> past = datetime.strptime('11:59', '%I:%M')
>>> future < past
>>> True # expected False, because '12:00' > '11:59'
>>> past_2 = datetime.strptime('11:58', '%I:%M')
>>> past < past_2
>>> False
为什么日期时间比较操作 returns True 而不是 False?
strptime 在这种情况下将“12:00”映射到午夜......格式说明符 %I "means": "Hour (12-hour clock) as a zero-padded decimal number."
%I
是十二小时制的小时数。除非您提供 AM 或 PM (%p
),否则它会选择 AM。 12:00 上午(即午夜)早于 11:59 上午。
如果您使用 %H
,您将获得 24 小时制,其中 12:00 将是中午而不是午夜。
https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
这里的问题是12:00
你的意思。打印出有问题的日期时间可能有助于您理解:
future, past, past_2
的值为:
(datetime.datetime(1900, 1, 1, 0, 0),
datetime.datetime(1900, 1, 1, 11, 59),
datetime.datetime(1900, 1, 1, 11, 58))
如您所见,12:00 被解释为当天的 start,而 11:59
被解释为接近中午,即 11 小时59 分钟后。