1

所以下面的代码示例:

 >>> 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

为什么日期时间比较操作返回True而不是False

4

3 回答 3

4

%I是十二小时制的小时数。除非您提供 AM 或 PM ( %p),否则它会选择 AM。12:00 AM(即午夜)在 11:59 AM 之前。

如果您使用%H,您将获得 24 小时制,其中 12:00 将是中午而不是午夜。

https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

于 2016-07-06T12:41:24.700 回答
0

在这种情况下,strptime 将 '12:00' 映射到午夜 ... 格式说明符 %I “表示”:“小时(12 小时制)作为零填充的十进制数。”

于 2016-07-06T12:40:45.193 回答
0

这里的问题是 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 被解释为一天的开始,而11:59被解释为将近中午,11 小时 59 分钟后。

于 2016-07-06T12:46:37.200 回答