日付、時刻をよく利用することがあるので、メモとして掲載します。datetimeとPOSIX タイムスタンプ(UnixTime)を相互変換するサンプルコードです。
UTC⇔JSTの変換サンプルコード
解説
各処理の解説です。
利用するモジュールを宣言します。
from datetime import datetime, timedelta, timezone
それぞれ日付を扱うために利用するクラスであり、datetimeは日時を扱い、timedeltaは経過時間(日付や時刻間の差)を扱い、timezoneは、タイムゾーンを扱います。
UTCからJSTを計算する
# 現在時刻(UTC)をdatetime型で取得する dt_utc = datetime.now(timezone.utc) print("UTC : {}, type : {}".format(dt_utc, type(dt_utc))) # UTC -> JST JST = timezone(timedelta(hours=+9)) utc_jst = dt_utc.astimezone(JST) print("UTC -> JST : {}, type : {}".format(utc_jst, type(utc_jst)))
datetime.now()に引数としてtimezone.utcを指定してdatetime型のUTC日時を取得します。 timezone.utc を指定しない場合、ローカル時間(プログラムが実行されているパソコンやサーバーの設定時間)が取得されます。
UTCからJSTへの変換には、datatime.astimezone()にUTCとJSTの時差+9を追加したタイムゾーン(サンプルの場合、JST)を指定します。UTCはデフォルトでtimezone.utcに定義されていますが、JSTは自分で定義する必要があります。
JSTからUTCを計算する
jst_utc = utc_jst.astimezone(timezone.utc) print("JST -> UTC : {}, type : {}".format(dt_utc, type(dt_utc)))
JSTからUTCを指定する際にも、datetime.astimezone()へUTCのタイムゾーンを指定します。
JSTを取得する
# 現在時刻(JST)をdatetime型で取得する JST = timezone(timedelta(hours=+9)) dt_jst = datetime.now(JST) print("JST : {}, type : {}".format(dt_jst, type(dt_jst)))
datetime.now()へJSTのタイムゾーンを指定します。
datetime -> POSIXタイムスタンプ(UnixTIme)とその逆
# 現在時刻(UTC)をPOSIXタイムスタンプ(float型)で取得する ts_utc = dt_utc.timestamp() print("timestamp utc : {}, type : {}".format(ts_utc, type(ts_utc))) # 現在時刻(JST)をPOSIXタイムスタンプ(float型)で取得する ts_jst = dt_jst.timestamp() print("timestamp jst : {}, type : {}".format(ts_jst, type(ts_jst))) # POSIXタイムスタンプ(float型)をもう一度datetimeに変換する dt_jst_2 = datetime.fromtimestamp(ts_jst, JST) print("timestamp -> datatime2 : {}".format(dt_jst_2)) print("datatime == datatime2 : {}".format(dt_jst == dt_jst_2))
datetime.timestamp()でdatetimeをPOSIXタイムスタンプに変換します。
POSIXタイムスタンプをdatetimeに変換するには、timestamp()を使います。