我有这个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 分钟
有人可以帮我吗?谢谢
您忽略了返回的timedelta
对象的.days
属性。请改用timedelta.total_seconds()
将它们包含在一个值中:
running_time = (current_time - launch_time).total_seconds()/60
或者,如果要忽略增量的微秒部分,请显式使用它:
running_time = current_time - launch_time.total_seconds()
running_time = running_time.seconds / 60 + running_time.days / 1440
从timedelta.total_seconds()
文档中:
返回持续时间中包含的总秒数。等效于在启用真除法的情况下计算
(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
。
请注意,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版本上,你可以按照Pieters的建议使用.total_seconds()
@Martijn:
elapsed_minutes = elapsed.total_seconds() // 60
注意://
使用整数除法。
另请参阅查找日期时间之间是否经过了 24 小时 - Python。