いつもお世話になっております。
早速本題に入らせて頂きます。
現在、Pythonでdatetimeのタイムゾーンを UTC → JSTに変換しようと試みているのですが、
日時が+9時間になってくれず途方に暮れております。
以下が現在のコードと、出力結果です。
Python
1print(system_date) 2print(system_date.tzinfo) 3print(type(system_date)) 4 5convert_date = system_date.replace(tzinfo=timezone('Asia/Tokyo')) 6convert_date2 = system_date.astimezone(timezone('Asia/Tokyo')) 7 8print(convert_date.tzinfo) 9print(convert_date) 10print(convert_date.strftime("%Y/%m/%d %H:%M:%S")) 11 12print(convert_date2.tzinfo) 13print(convert_date2) 14print(convert_date2.strftime("%Y/%m/%d %H:%M:%S"))
出力結果
2020-01-28 07:38:51 None <class 'datetime.datetime'> Asia/Tokyo 2020-01-28 07:38:51+09:19 2020/01/28 07:38:51 Asia/Tokyo 2020-01-28 07:38:51+09:00 2020/01/28 07:38:51
出力したい想定時刻は9時間後の「2020/01/28 16:38:51」です。
タイムゾーンを変換するだけでは時刻は変わってくれないのでしょうか・・・?
そんなわけないと思ってるのですが・・・
お時間ある方でタイムゾーン変換について知識をお持ちの方いらっしゃいましたらご助力頂けますと幸いです。
暫定対応
Python
1(system_date + timedelta(hours=9)).strftime("%Y/%m/%d %H:%M:%S"))
強制的に9時間+してあげればまぁJSTにはなりますが・・・これしかないのでしょうか?
こちらの記事が参考になるかもしれません。(既にご覧になりましたでしょうか? timedelta(hours=9) の方法も提示されていますね。
https://dev.classmethod.jp/server-side/python/python-time-string-timezone/
注目すべきは、以下の部分かと。
> しかしdatetimeはそれらの表記とUTCからの相対時間の関係を把握していないため、 datetimeだけで実現することはできません。
私自身は、ローカル(JST)時間はdatetime.datetime.now() を使ってしまうことが多いので、回答に至りませんでした。
参考:
>>> import datetime
>>> sd = datetime.datetime.utcnow()
>>> print(sd)
2020-01-28 10:01:25.189790
>>> sd = datetime.datetime.now()
>>> print(sd)
2020-01-28 19:01:30.985915
なるほど・・・私が考えているほど単純ではなかったということですね・・・
回答1件
あなたの回答
tips
プレビュー