在两次比较的情况下,Python日期时间比较是不正确的:12:00和11:59

时间:2016-07-06 12:36:59

标签: python datetime datetime-comparison

以下代码示例:

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

为什么datetime比较操作返回 True 而不是 False

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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分钟。