37

POSIXタイムスタンプ(エポックからの秒数)をオブジェクトに変換するために使用されるタイムゾーン(つまり、UTCオフセットまたはdatetime.timezoneそのオフセットを持つインスタンス)を取得することは可能ですか?datetime.datetime.fromtimestamp()datetime

datetime.datetime.fromtimestamp()は POSIX タイムスタンプをナイーブdatetimeオブジェクト (つまり なしtzinfo) に変換しますが、システムのロケールを使用してローカル タイムゾーンとその時点で有効だった UTC オフセットに調整します。

たとえば、日付 2008-12-27 UTC 午前 0 時 (エポックから 40 * 356 * 86400 秒) を使用すると、次のようになります。

>>> datetime.datetime.fromtimestamp(40 * 356 * 86400)
datetime.datetime(2008, 12, 27, 1, 0)

そのタイムスタンプはdatetime、午前 1 時のオブジェクトに変換されます (この時刻は CET/CEST タイムゾーンです)。100 日後の結果は次のとおりです。

>>> datetime.datetime.fromtimestamp((40 * 356 + 100) * 86400)
datetime.datetime(2009, 4, 6, 2, 0)

午前2時です。これは、それまでに DST がアクティブだったためです。

返されたインスタンスで使用するdatetime.datetime.fromtimestamp()が設定されると思っていましたが、そうではありません。tzinfodatetime

4

4 に答える 4

31

datetime.fromtimestamp(ts)「エポックからの秒数」を現地時間を表す単純な日時オブジェクトに変換します。tzinfoは常にNoneこの場合です。

ローカル タイムゾーンは、過去に異なる UTC オフセットを持っていた可能性があります。履歴タイムゾーン データベースへのアクセスを提供する一部のシステムでは、fromtimestamp()それが考慮される場合があります。

で使用される UTC オフセットを取得するにはfromtimestamp():

utc_offset = fromtimestamp(ts) - utcfromtimestamp(ts)

Python でコンピューターの utc オフセットを取得するも参照してください。

于 2015-01-13T09:01:25.500 に答える