私は 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)