本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:Python2中datetime对象的timestamp方法的替代
本文链接:Python2中datetime对象的timestamp方法的替代
在Python3里,可以直接用datetime对象的timestamp方法得到对应的时间戳。但是Python2又没有,为了兼容,还是要找到替代品,完成同样的事情。
1 2 3 |
from datetime import datetime t = datetime.now() timestamp = t.timestamp() # Python3才有 |
于是就Google一下“python 2 datetime timestamp”,第一个结果给出了这样的回答:
1 2 3 4 |
from datetime import datetime import time t = datetime.now() timestamp = time.mktime(t.timetuple()) + t.microsecond/1000000.0 |
看上去没什么问题,但是t.timetuple()
没有时区信息,而datetime有,那时间戳就不是UTC的了,和Python3里的又不一样。
点开后面的结果,又一个回答是这样的:
1 2 3 4 5 |
from datetime import datetime import time t = datetime.now() epoch = datetime.utcfromtimestamp(0) timestamp = (t - epoch).total_seconds() |
看上去又没什么问题,但是一运行就发现,如果t
和epoch
中一个有时区,一个没时区,就会出现异常。
最后终于找到了个能用的,可以解决时区的问题:
1 2 3 4 5 |
from datetime import datetime import time t = datetime.now() utc_naive = t.replace(tzinfo=None) - t.utcoffset() timestamp = (utc_naive - datetime(1970, 1, 1)).total_seconds() |
虽然平时戏称自己是面向Google编程的,但有时Google得到的答案也是错的,甚至要找许久才能找到正确答案,这个过程还是有点考验人的。对外界得到的东西,还需要亲自试验,可能问题隐藏在深处,难以使人察觉。上面的答案一和二都被选为正确答案并得到了许多赞,但在我这里就是错的,只因为我考虑到时区的情况,而别人可能没考虑到或者不关心。
最后我要说,还是让Python2早早入土更好。