web-dev-qa-db-ja.com

Python:DSTが有効かどうかを知らずにタイムゾーン対応のタイムスタンプをUTCに変換する方法

常に太平洋時間である単純なタイムスタンプをUTC時間に変換しようとしています。以下のコードでは、このタイムスタンプが太平洋時間であることを指定できますが、UTCからのオフセットが-7時間である必要があることはわかりません。まだ終わっていません。

スクリプト:

import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = naive_date.replace(tzinfo=localtz)
print date_aware_la

出力:

    2013-10-21 08:44:08-08:00

DSTが11月3日に終了するまで、オフセットは-07:00になるはずです。 DSTが有効な場合と無効な場合に、タイムゾーン対応の日付に正しいオフセットを設定するにはどうすればよいですか? pytzはDSTが11月3日に有効になることを知るのに十分スマートですか?

全体的な目標:タイムスタンプをUTCに変換しようとしているのは、DSTが有効かどうかを示すことなく、タイムスタンプを太平洋時間で取得することを知っているからです。 python自体からこの日付を生成していないので、utc_now()だけを使用することはできません。

19
user1152532

localizeメソッドを使用します。

import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = localtz.localize(naive_date)
print(date_aware_la)   # 2013-10-21 08:44:08-07:00

これは pytzドキュメント の「例と使用法」セクションで説明されています。

その後、UTCに進みます。

utc_date = date_aware_la.astimezone(pytz.utc)
print(utc_date)
24