将datetime.now()与utc timestamp与python 2.7进行比较

时间:2016-09-20 19:19:31

标签: python python-2.7

我有一个时间戳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

我该怎么办?

2 个答案:

答案 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中查看更多详情。