Python でタイムゾーンを変換してみた 【pytzを使って…】

これまでの記事で、2018年元旦の初日の出を拝みに行くにあたって、正確な日の出時間を知りたかったが、現状ではGPS位置情報からサクッと正確な日の出時間の情報を得ることができなかった為、自分で計算する方法を調べてみたという話…

緯度経度情報と計算したい日付情報を指定すれば、UTC(世界標準時)ベースで出力する方法まではまとめることができた。

でもUTCのままだとやっぱりわかりにくい…折角なら日本標準時間で出力したい!!っtことで、UTCを日本標準時に変換して出力できる方法をまとめてみた。

準備:Pythonライブラリ"pytz"をインストールする

"pytz"はPython標準ライブラリではないが、ドキュメントの中で使用が推奨されているので、準標準ライブラリと考えられる。
インストール方法は下記

pip install pytz


Python で UTCから日本標準時への変換

タイムゾーンを扱うモジュールをインポートする

import pytz

タイムゾーンを設定する為には下記関数を用いる

# UTCに設定
pytz.timezone("utc")

# "Asia/Tokyo"に設定
pytz.timezone("Asia/Tokyo")

次にdatatimeクラスにタイムゾーンを設定する為には下記関数を用いる

// UTCをタイムゾーンをして設定する
datetime().astimezone(pvtz.timezone("utc"))

以上から、前回まとめた日の出の時刻を計算した結果を日本標準時に変換するには下記の処理で実現できる

import pytz
import ephem

location = ephem.Observer()
location.lat,location.lon='34.877599','138.333849'
location.date = '2018/1/1'

result = location.previous_rising(ephem.Sun())
print(result)
# 2017/12/31 21:53:58  // UTCが出力される

print(result.datetime())
# datetime.datetime(2017, 12, 31, 21, 53, 57, 653083)  // datetime形式で出力
# 但しタイムゾーンが設定されていない。ここが問題。

# UTCを設定
result_utc = result.datetime().astimezone(pytz.timezone('utc'))
# print(result_utc)
# datetime.datetime(2017, 12, 31, 12, 53, 57, 653083, tzinfo=<UTC>) // UTCがセットされる

# 日本標準時に変換
result_jp = pytz.timezone('Asia/Tokyo').normalize(pytz.utc.localize(result.datetime()).astimezone(pytz.timezone('Asia/Tokyo')))

# 結果を出力
print(result_jp)
# datetime.datetime(2018, 1, 1, 6, 53, 57, 653083, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>) // 日本時間 2018/1/1 6:53:57 に日の出!

以上から、UTC処理された結果を日本標準時に変換することができた!!