Python 不比较日期?
Python doesn't compare date?
我有这个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
值return只有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
来自documentation for timedelta.total_seconds()
:
Return the total number of seconds contained in the duration. Equivalent to (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
computed with true division enabled.
注意,launch_time
和 current_time
可能有 不同的 UTC 偏移量,即除非 launch_time.tzinfo
是 pytz
的实例时区(存储历史(past/future)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()
用作 :
elapsed_minutes = elapsed.total_seconds() // 60
注意://
使用整数除法。
另见,Find if 24 hrs have passed between datetimes - Python。
我有这个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
值return只有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
来自documentation for timedelta.total_seconds()
:
Return the total number of seconds contained in the duration. Equivalent to
(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
computed with true division enabled.
注意,launch_time
和 current_time
可能有 不同的 UTC 偏移量,即除非 launch_time.tzinfo
是 pytz
的实例时区(存储历史(past/future)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()
用作
elapsed_minutes = elapsed.total_seconds() // 60
注意://
使用整数除法。
另见,Find if 24 hrs have passed between datetimes - Python。