Pythonの日付時刻をタイムスタンプに変換し、UTCに戻すと、ローカルタイムゾーンが引き続き使用されます。質問する

Pythonの日付時刻をタイムスタンプに変換し、UTCに戻すと、ローカルタイムゾーンが引き続き使用されます。質問する

私は utc タイムスタンプを提供するコードで作業しており、それを適切な datetime に変換したいと考えています。残念ながら、pytz で簡単なケースをテストすると、datetime に 6 時間 (UTC に対する CST オフセット) が追加されます。他のタイムゾーンとの差も計算しているため、タイムゾーン データを正確に保つ必要があります。utc タイムスタンプを utc datetime に変換する理由と方法について何かアイデアはありますか?

In [1]: import pytz

In [2]: from datetime import datetime

In [3]: import time

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC)
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC)
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()))
Out[6]: datetime.datetime(2007, 1, 1, 0, 0)

ベストアンサー1

「エポックからの秒数」タイムスタンプから UTC の時刻を表す単純な datetime オブジェクトを取得するには:

from datetime import datetime

utc_dt = datetime.utcfromtimestamp(ts)

UTC タイムゾーンに対応した datetime オブジェクトを取得する場合:

import pytz

aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)

他のタイムゾーンに変換するには:

tz = pytz.timezone('America/Montreal')
dt = aware_utc_dt.astimezone(tz)

タイムスタンプを指定されたタイムゾーンの認識された datetime オブジェクトに直接変換するには:

dt = datetime.fromtimestamp(ts, tz)

おすすめ記事