如何在Python中构造UTC“日期时间”对象



我正在使用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将Olson tz数据库引入Python。此库允许使用Python 2.4进行准确且跨平台的时区计算或更高。它最终也解决了时间不明确的问题夏令时,你可以在Python中阅读更多图书馆参考资料(datetime.tzinfo)。

此外,我建议阅读:理解DateTime,tzinfo,timedelta&python 中的时区转换

相关内容

  • 没有找到相关文章

最新更新