EC2立てたけどそういえば時間がUTCだった。
JSTで取った競馬の出走時間に合わせてjobのスケジューリングがしたいし、どうせそれ以外に使わないのでTimezone設定をPythonで変更する。
環境:Ubuntu20.04, Python3.10
流れ
・今のtimezoneを確認する
JSTになってる→OK
JSTになってない→OKじゃないから下をやる
・ 環境変数TZを日本時間に設定する
・ 変更を反映させる
終わり。
大体全部Python公式のtime libraryドキュメントにそのまま載ってます。
from datetime import datetime import os import time current_tz_name = time.localtime().tm_zone if current_tz_name == "JST": print("OK") else: print("OKじゃない") os.environ["TZ"] = "Japan" time.tzset() print(time.localtime().tm_zone) print(datetime.now())
current timezoneはdocの注釈に倣って取得する。
https://docs.python.org/ja/3/library/time.html#time.tzname
罠というか、time.tznameとかいうそれっぽいのがあるのだが、それで取得するとサマータイム(これ嫌い)入ったタプルを返してくる。
でもドキュメントのすぐ下に
It is recommended to use the tm_gmtoff and tm_zone results from localtime() to obtain timezone information.
って書いてあった。はぇ~。
そもそも各timezoneに合わせていい感じにスケジュールの時間を±すればいいのですが、どうせならと思って変えた。
インスタンスの環境変数TZをいじったので後でlocal timeとかデフォのdateとか触った時に予想通りじゃない事があるかも。
イヤなら±する方で。
https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
https://manpages.debian.org/bullseye/manpages-ja/tzfile.5.ja.html