0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Python】datetimeオブジェクトのタイムゾーンを一行で変更する(JST <=> UTC)

Posted at

何番煎じかわかりませんが、(タイムゾーン指定のない)シンプルな日時文字列から、入力と出力のタイムゾーンを指定して変換結果を得るコードのメモになります。

utcとの差分9時間を加減すれば処理できるのですが、ちゃんと?、'UTC'、'Asia/Tokyo'などとタイムゾーンを指定して変換したい場合のコードです。

日付関連の用語に慣れていないので、もし誤用などありましたらご指摘ください。

使っているライブラリ

import datetime
import pytz

JSTの日時文字列をUTCに変換する

# 文字列から(タイムゾーン情報を持たないnaiveな)datetimeオブジェクトを作成する
datetime_obj = datetime.datetime.strptime("2019-10-28 13:00:00", "%Y-%m-%d %H:%M:%S")

# 変換(JST -> UTC)
utc_datetime_obj = pytz.timezone('Asia/Tokyo').localize(datetime_obj).astimezone(pytz.timezone('UTC'))

# 結果を確認
print(utc_datetime_obj.strftime("%Y-%m-%d %H:%M:%S"))
# (9時間前の時刻が表示される)
# 2019-10-28 04:00:00

やっていること

datetimeオブジェクトを作成

日時文字列とその書式情報から、タイムゾーン情報を持たないnaiveなdatetimeオブジェクトを作成

datetime_obj = datetime.datetime.strptime("2019-10-28 13:00:00", "%Y-%m-%d %H:%M:%S")

datetimeオブジェクトにタイムゾーン情報を付与

作成したdatetimeオブジェクトに(JSTの)タイムゾーン情報を付与してawareなdatetimeオブジェクトを作成

jst_datetime_obj = pytz.timezone('Asia/Tokyo').localize(datetime_obj)

astimezoneでUTCに変換

utc_datetime_obj = jst_datetime_obj.astimezone(pytz.timezone('UTC'))

(逆) UTCの日時文字列をJSTに変換する

# この文字列をUTCに見立てて処理する
# 文字列から(タイムゾーン情報を持たないnaiveな)datetimeオブジェクトを作成する
datetime_obj = datetime.datetime.strptime("2019-10-28 13:00:00", "%Y-%m-%d %H:%M:%S")

# 変換(UTC -> JST)
jst_datetime_obj = pytz.timezone('UTC').localize(datetime_obj).astimezone(pytz.timezone('Asia/Tokyo'))

# 確認
print(jst_datetime_obj.strftime("%Y-%m-%d %H:%M:%S"))
# (9時間後の時刻が表示される)
# 2019-10-28 22:00:00
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?