在网上做一件非常基本的事情似乎有很多困惑:创建一个UTC时区的日期时间对象,自UTC时区的unix时期以来,给出秒数。基本上,我总是希望在绝对时间/ UTC工作。
我正在使用python 3.5(现在是最新版本),并希望从UTC(+ 0 / Zulu偏移)的上下文中获取一个datetime
对象,该值来自经过的秒数1970年1月1日。
这是错误的,因为第一次是在我的本地时区创建的,然后我尝试切换到UTC。
import datetime
import pytz
dt = datetime.datetime.fromtimestamp(my_seconds).replace(tzinfo=pytz.UTC)
答案 0 :(得分:3)
Python仅针对该案例提供了方法utcfromtimestamp
。 utcfromtimestamp
import datetime
seconds = 0
utcdate_from_timestamp = datetime.datetime.utcfromtimestamp(seconds)
答案 1 :(得分:0)
如果my_seconds
是POSIX时间戳,那么在Python 3中将其转换为datetime
:
#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone
utc_dt = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=my_seconds)
utc_dt = datetime.fromtimestamp(my_seconds, timezone.utc)
naive_utc_dt = datetime.utcfromtimestamp(my_seconds)
如果您当地的时区是"对" (非POSIX)那么只有第一个公式是正确的(其他人将my_seconds
解释为TAI时间戳,在这种情况下为datetime(1970, 1, 1, 0, 0, 10)
TAI时期。)
The first formula is more portable and may support a wider input range than the others.
由于rounding errors on some Python versions,第1和第2个表达式的结果可能会有所不同。
第二次和第三次调用应仅由tzinfo
属性不同(后者返回一个天真的日期时间对象(.tzinfo is None
))。您应该更喜欢时区感知的日期时间对象,以避免歧义。