web-dev-qa-db-ja.com

PythonでUTC `datetime`オブジェクトを作成するにはどうすればよいですか?

私は the datetime.datetime class from Python standard library。私はこのクラスのインスタンスをUTCタイムゾーンで構築したいと思います。そのためには、tzinfo引数として渡す必要があることを収集しますdatetimeコンストラクターに tzinfoクラス のインスタンスを追加します。

tzinfoクラスのドキュメント は次のように述べています:

tzinfoは抽象基本クラスです。つまり、このクラスを直接インスタンス化しないでください。具体的なサブクラスを派生させ、(少なくとも)使用するtzinfoメソッドが必要とする標準のdatetimeメソッドの実装を提供する必要があります。 datetimeモジュールは、tzinfoの具象サブクラスを提供しません。

今私は困惑しています。私がやりたいのは「UTC」を代表することだけです。このように3文字程度でできるはずです

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

つまり、ドキュメントで指示されていることを実行するつもりはありません。だから私の代わりは何ですか?

23
jameshfisher

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)

ドキュメント link

以前のバージョンで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)
43
jfs

私は pytz で多く使用し、このモジュールから非常に満足しています。

pytz

pytzは、Olson tzデータベースをPythonに取り込みます。このライブラリでは、Python 2.4以降)を使用して正確でクロスプラットフォームタイムゾーン計算を行うことができます。あいまいな時間の問題も解決します詳細については、Python Library Reference(datetime.tzinfo)。

また、私は読むことをお勧めします: PythonでのDateTime、tzinfo、timedeltaおよびTimeZone変換の理解

3
user4512135