自unix epoch以来,如何创建一个datetime对象?

时间:2016-02-23 23:14:38

标签: python-3.x datetime pytz

在网上做一件非常基本的事情似乎有很多困惑:创建一个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)

2 个答案:

答案 0 :(得分:3)

Python仅针对该案例提供了方法utcfromtimestamputcfromtimestamp

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))。您应该更喜欢时区感知的日期时间对象,以避免歧义。