如何在Python中构建UTC`datetime`对象?

时间:2015-02-13 11:04:06

标签: python datetime timezone

我正在使用Python标准库中的the datetime.datetime class。我希望使用UTC时区构造此类的实例。为此,我认为我需要将tzinfo参数作为datetime构造函数传递给the tzinfo class的某个实例。

The documentation for the tzinfo class说:

  

tzinfo是一个抽象基类,意味着不应该直接实例化此类。您需要派生一个具体的子类,并且(至少)提供您使用的tzinfo方法所需的标准datetime方法的实现。 datetime模块不提供tzinfo的任何具体子类。

现在我很难过。我想做的就是代表" UTC"。我应该能够使用大约三个字符来做到这一点,比如这个

import timezones
...
t = datetime(2015, 2, 1, 15, 16, 17, 345, timezones.UTC)

简而言之,我不会按照文档告诉我的那样去做。那么我的另类选择是什么呢?

2 个答案:

答案 0 :(得分:26)

自Python 3.2以来,stdlib中有固定偏移时区:

from datetime import datetime, timezone

t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=timezone.utc)

虽然在早期版本上实现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)

答案 1 :(得分:3)

我在pytz中使用了很多,并且对此模块非常满意。

<强> pytz

  

pytz将Olson tz数据库带入Python。这个库允许   使用Python 2.4进行准确且跨平台时区计算   或更高。它也最终解决了模糊时代的问题   夏令时的时间,你可以在Python中阅读更多   图书馆参考(datetime.tzinfo)。

我还建议您阅读:Understanding DateTime, tzinfo, timedelta & TimeZone Conversions in python