Python没有比较日期?

时间:2015-01-16 11:09:39

标签: python date datetime time compare

我有这个launch_time:

  

2015-01-15 10:31:54 + 00:00

我得到current_time

current_time = datetime.datetime.now(launch_time.tzinfo)

我希望两次都相同所以我使用了tzinfo。所以,current_time的值是

  

2015-01-16 10:55:50.200571 + 00:00

我用这个运行时间:

running_time = (current_time - launch_time).seconds/60

该值仅返回 23分钟。它应该一天+ 23分钟= 1463分钟

有人能帮助我吗?感谢

2 个答案:

答案 0 :(得分:9)

您忽略了返回的.days对象的 timedelta 属性。请使用timedelta.total_seconds()将这些值包含在一个值中:

running_time = (current_time - launch_time).total_seconds()/60

如果要忽略delta的微秒部分,则显式使用它:

running_time = current_time - launch_time.total_seconds()
running_time = running_time.seconds / 60 + running_time.days / 1440

来自documentation for timedelta.total_seconds()

  

返回持续时间中包含的总秒数。相当于(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6计算并启用了真正的除法。

答案 1 :(得分:1)

请注意,launch_timecurrent_time可能有不同的 UTC偏移,即,除非launch_time.tzinfopytz时区的实例(存储历史记录) (过去/将来)tz数据)然后你的代码是错误的。首先将launch_time转换为UTC:

from datetime import datetime

launch_time_in_utc = launch_time.replace(tzinfo=None) - launch_time.utcoffset()
elapsed = (datetime.utcnow() - launch_time_in_utc)

其中elapsed是自发布时间以来表示为timedelta对象的经过时间。

在Python 3.2 +中将timedelta对象转换为分钟:

from datetime import timedelta

elapsed_minutes = elapsed // timedelta(minutes=1)

在较旧的Python版本上,您可以将.total_seconds()用作@Martijn Pieters suggested

elapsed_minutes = elapsed.total_seconds() // 60

注意://使用整数除法。

另见Find if 24 hrs have passed between datetimes - Python