21

私の Python ベースの Web サーバーは、クライアントのタイムゾーン (UTC オフセットで表される) を使用して日付操作を実行する必要があります。指定された UTC オフセットをタイムゾーンとして datetime オブジェクトを作成するにはどうすればよいですか?

4

3 に答える 3

25

使用dateutil:

>>> import datetime
>>> import dateutil.tz
>>> datetime.datetime(2013, 9, 11, 0, 17, tzinfo=dateutil.tz.tzoffset(None, 9*60*60))
datetime.datetime(2013, 9, 11, 0, 17, tzinfo=tzoffset(None, 32400))
>>> datetime.datetime(2013, 9, 11, 0, 17, tzinfo=dateutil.tz.tzoffset('KST', 9*60*60))
datetime.datetime(2013, 9, 11, 0, 17, tzinfo=tzoffset('KST', 32400))

>>> dateutil.parser.parse('2013/09/11 00:17 +0900')
datetime.datetime(2013, 9, 11, 0, 17, tzinfo=tzoffset(None, 32400))
于 2013-09-10T15:22:39.437 に答える
8

datetimeモジュールのドキュメントにはtzinfo、固定オフセットを表すクラスの例が含まれています。

ZERO = timedelta(0)

# A class building tzinfo objects for fixed-offset time zones.
# Note that FixedOffset(0, "UTC") is a different way to build a
# UTC tzinfo object.

class FixedOffset(tzinfo):
    """Fixed offset in minutes east from UTC."""

    def __init__(self, offset, name):
        self.__offset = timedelta(minutes = offset)
        self.__name = name

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

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

    def dst(self, dt):
        return ZERO

Python 3.2 以降、このコードを提供する必要はなくなりました。datetime.timezoneとがモジュールにdatetime.timezone.utc含まれているため、代わりに使用する必要があります。datetime

于 2013-09-10T15:09:48.250 に答える