25歳無職です

なんか文句ありますか?(なーい)

Linux環境のtimezone設定をPythonで確認、変更する

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