我有一个时间戳1474398821633L
,我认为是在utc。我想将它与datetime.datetime.now()进行比较,以验证它是否已过期。
我正在使用python 2.7
from datetime import datetime
timestamp = 1474398821633L
now = datetime.now()
if datetime.utcfromtimestamp(timestamp) < now:
print "timestamp expired"
但是在尝试从时间戳创建日期时间对象时出现此错误:ValueError: timestamp out of range for platform localtime()/gmtime() function
我该怎么办?
答案 0 :(得分:3)
看起来就像你的时间戳以毫秒为单位。 Python以秒为单位使用时间戳:
>>> datetime.datetime.utcfromtimestamp(1474398821.633)
datetime.datetime(2016, 9, 20, 19, 13, 41, 633000)
换句话说,您可能需要将时间戳除以1000.
,以使其达到合适的范围。
此外,您可能希望比较datetime.utcnow()
而不是datetime.now()
,以确保您正确处理时区: - )。
答案 1 :(得分:2)
作为@mgilson pointed out,你的输入很可能是&#34;毫秒&#34;,而不是&#34;秒,因为纪元&#34;。
使用error
代替time.time()
:
datetime.now()
如果您需要import time
if time.time() > (timestamp_in_millis * 1e-3):
print("expired")
,请使用datetime
代替datetime.utcnow()
。不要将返回本地时间的datetime.now()
与作为天真日期时间对象的.now()
进行比较,并将UTC时间也作为天真的日期时间对象进行比较(这就像直接比较摄氏和华氏:你应该转换为相同的单位第一)。
utcfromtimestamp()
在Find if 24 hrs have passed between datetimes - Python中查看更多详情。