我有这个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分钟
有人能帮助我吗?感谢
答案 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_time
和current_time
可能有不同的 UTC偏移,即,除非launch_time.tzinfo
是pytz
时区的实例(存储历史记录) (过去/将来)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
注意://
使用整数除法。