datetimeとtimezone
文字列からdatetime型にし、それをelasticsearchに登録するときに、
timezoneを指定しないとおかしなことになりました。
その際に行ったことの備忘録
です。もっと楽なやり方あったら教えていただきたいです。
python3.7より前の場合
- 文字列のフォーマット:
YYYY-mm-dd HH:MM:SS+0900
-
+0900
を末尾に追加 (UTC+9時間なので )
-
- strptime()のフォーマット:
%Y-%m-%d %H:%M:%S%z
-
%z
がtimezoneに対応している
-
例
from datetime import datetime as dt
# 文字列
time_str = "2020-11-22 18:00:00+0900"
# timezoneを含んだdatetime型
time_dt = dt.strptime(time_str, '%Y-%m-%d %H:%M:%S%z')
print(time_dt.tzinfo)
# UTC+09:00
ptyhon3.7の場合
fromisoformat()
を利用できます。
ISO 8601形式では末尾に+HH:MM
または-HH:MM
の形式でタイムゾーン情報を含んでいるので、
それに準ずる形の文字列を引数とします。
# 文字列
time_str = '2020-09-12 12:22:30+09:00'
# timezoneを含んだdatetime型
time_dt = dt.fromisoformat(time_str)
print(time_dt.tzinfo)
# UTC+09:00