Pythonの時間の扱い、何度書いても忘れてしまう。そしてタイムゾーンの変換は、python3.9以降はzoneinfoが便利と最近知る。
>>> from datetime import datetime
>>> from zoneinfo import ZoneInfo
# 現在時刻をTokyoのタイムゾーンとしてセットする
>>> tz = ZoneInfo("Asia/Tokyo")
>>> now = datetime.now(tz)
>>> print(now)
2024-06-12 22:12:59.704388+09:00
# ミリ秒までいらない。replaceで切り捨てる。
>>> now2 = now.replace(microsecond = 0)
>>> print(now2)
2024-06-12 22:12:59+09:00
# 日付/時間だけ取得する
>>> day = now2.date()
>>> print(day)
2024-06-12
>>> time = now2.time()
>>> print(time)
22:12:59
時刻を任意のタイムゾーンに変換するにはastimezoneを利用できるが、元の値がnaiveかawareかで意味が変わってくるらしい。
naiveから:ローカルタイムとみなしてタイムゾーン変更します。
awareから:タイムゾーン変更します。
dt_jst = dt.astimezone(tz)
ちなみにzoneinfoは、
Windows環境では「tzdata」をpipで入れておかないとエラーになる。
とのことだ。確かにWindowsでは動かなかった。
参考
Lambda(Python3.9)でzoneinfoを使ってタイムゾーン設定するとかんたん
Python 標準ライブラリ zoneinfo IANAタイムゾーン
python datetimeの切り捨て
[Python]datetimeから日付のみを取得するには?
【Python datetime】naiveとawareの変換