Python-最简单,最连贯的方法,可以在UTC中获得时区感知的当前时间



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)

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)

我使用pytz

然后使用以下代码

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

在UTC中使用datetime.utcnow()

从这个答案中适应,这是如何使对象时区了解对象。

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

最新更新