我正在使用Python标准库中的datetime.datetime
类。我希望构造一个具有UTC时区的此类实例。为此,我收集到需要将tzinfo
类的某个实例作为tzinfo
参数传递给datetime
构造函数。
tzinfo
类的文档说明:
tzinfo
是一个抽象基类,这意味着这个类不应该直接实例化。您需要派生一个具体的子类,并且(至少)提供您使用的datetime
方法所需的标准tzinfo
方法的实现。datetime
模块不提供tzinfo
的任何具体子类。
现在我被难住了。我只想代表"UTC"。我应该可以使用大约三个字符来完成,比如这个
import timezones
...
t = datetime(2015, 2, 1, 15, 16, 17, 345, timezones.UTC)
简言之,我不会按照文档告诉我的去做。那么我的选择是什么呢?
自Python 3.2:以来,stdlib中存在固定偏移时区
from datetime import datetime, timezone
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=timezone.utc)
构造函数为:
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Docs链接。
尽管在早期版本上很容易实现utc时区:
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
class UTCtzinfo(tzinfo):
def utcoffset(self, dt):
return ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return ZERO
utc = UTCtzinfo()
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=utc)
我在pytz中使用了很多,对这个模块非常满意。
pytz
pytz
将Olsontz
数据库引入Python。此库允许使用Python 2.4进行准确且跨平台的时区计算或更高。它最终也解决了时间不明确的问题夏令时,你可以在Python中阅读更多图书馆参考资料(datetime.tzinfo
)。
此外,我建议阅读:理解DateTime,tzinfo,timedelta&python 中的时区转换