ローカル時間の日時文字列をUTC 時間の文字列に変換するにはどうすればよいですか?
以前にもこれをやったことがあるはずですが、見つけることができず、SO が将来私 (および他の人) にこれをやらせる手助けをしてくれることを願っています。
説明: たとえば、2008-09-17 14:02:00
ローカル タイムゾーン ( ) の場合、同等の時刻+10
を含む文字列を生成したいと思います。UTC
2008-09-17 04:02:00
また、http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/ただし、DST やその他の問題により、現地時間から UTC 時間への一意の変換がないため、一般にこれは不可能であることに注意してください。
ベストアンサー1
datetime.datetime
まず、文字列を解析して、単純な日付時刻オブジェクトに変換します。これは、タイムゾーン情報が添付されていないのインスタンスです。ドキュメンテーション。
使用pytz
モジュールには、タイムゾーンと UTC の完全なリストが付属しています。ローカル タイムゾーンが何であるかを把握し、そこからタイムゾーン オブジェクトを構築し、それを操作して、単純な datetime にアタッチします。
最後に、datetime.astimezone()
メソッドを使用して日付時刻を UTC に変換します。
文字列「2001-2-3 10:11:12」の、ローカル タイム ゾーン「America/Los_Angeles」を使用したソース コード:
from datetime import datetime
import pytz
local = pytz.timezone("America/Los_Angeles")
naive = datetime.strptime("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
local_dt = local.localize(naive, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)
そこから、strftime()
メソッドを使用して、必要に応じて UTC 日時をフォーマットできます。
utc_dt.strftime("%Y-%m-%d %H:%M:%S")