Python - 以UTC格式获取时区感知当前时间的最简单,最连贯的方法?

时间:2014-03-11 15:21:04

标签: python datetime timezone

datetime.now()似乎没有附加时区信息。我想要UTC的当前时间。我该怎么办?

>>> from datetime import datetime
>>> y = datetime.now()
>>> y
datetime.datetime(2014, 3, 11, 11, 18, 33, 598489)

起初我认为datetime.utcnow()是明显的解决方案,但后来我发现它没有附加时区信息(WTF?)。

>>> from datetime import datetime
>>> y = datetime.utcnow()
>>> y
datetime.datetime(2014, 3, 11, 16, 19, 40, 238810)

3 个答案:

答案 0 :(得分:4)

在Python 3中:

datetime.now(timezone.utc)

在Python 2.x中没有时区对象,但您可以编写自己的对象:

try:
    from datetime import timezone
except ImportError:
    from datetime import tzinfo, timedelta

    class timezone(tzinfo):
        def __init__(self, utcoffset, name=None):
            self._utcoffset = utcoffset
            self._name = name

        def utcoffset(self, dt):
            return self._utcoffset

        def tzname(self, dt):
            return self._name

        def dst(self, dt):
            return timedelta(0)

    timezone.utc = timezone(timedelta(0), 'UTC')

然后你可以像在Python 3中一样datetime.now(timezone.utc)

答案 1 :(得分:1)

datetime.utcnow()用于UTC当前时间。

根据this答案,以下是如何使对象能够识别时区。

>>> import pytz
>>> from datetime import datetime
>>> datetime.now(pytz.utc)
datetime.datetime(2014, 3, 11, 15, 34, 52, 229959, tzinfo=<UTC>)

答案 2 :(得分:1)

我使用pytz

然后使用以下代码

import pytz
from datetime import datetime
now = datetime.utcnow().replace(tzinfo = pytz.utc)