私は 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)
つまり、ドキュメントで指示されていることを実行するつもりはありません。だから私の代わりは何ですか?
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)
私は pytz で多く使用し、このモジュールから非常に満足しています。
pytz
pytz
は、Olsontz
データベースをPythonに取り込みます。このライブラリでは、Python 2.4以降)を使用して正確でクロスプラットフォームタイムゾーン計算を行うことができます。あいまいな時間の問題も解決します詳細については、Python Library Reference(datetime.tzinfo
)。
また、私は読むことをお勧めします: PythonでのDateTime、tzinfo、timedeltaおよびTimeZone変換の理解