🧩 はじめに
最近、天気データの自動取得と可視化に取り組んでいて、OpenWeatherMapのAPIを使って東京都の天気情報を取得するスクリプトを作成しました。レスポンスの中に "dt": 1759545083 のような項目があり、「これって何の時間?」と気になったので調べてみました。
これは UNIXタイムスタンプと呼ばれる形式で、Pythonで扱うには少し工夫が必要です。この記事では、UNIXタイムスタンプの意味と、JST(日本標準時)への変換方法についてまとめておきます。
1. UNIXタイムスタンプとは?
UNIXタイムスタンプは、1970年1月1日 00:00:00 UTCからの経過秒数を表す数字です。例えば:
"dt": 1759545083
これは「2025年10月4日 11:31:23(JST)」を意味します。
2. Pythonで変換する方法
Pythonでは datetime モジュールを使って簡単に変換できます。
from datetime import datetime, timezone, timedelta timestamp = 1759545083 # JST(UTC+9)を指定 jst = timezone(timedelta(hours=9)) dt_jst = datetime.fromtimestamp(timestamp, tz=jst) # 表示形式を整える print(dt_jst.strftime('%Y-%m-%d %H:%M:%S'))
出力結果:
2025-10-04 11:31:23
3. JSTを明示的に指定する方法
Pythonでは datetime.now() を使うと、実行環境のローカル時間になりますが、明示的に日本標準時(JST)を指定したい場合は timezone(timedelta(hours=9)) を使うのが安全です。
以下はそのコード例です:
from datetime import datetime, timezone, timedelta # JST(UTC+9)を定義 jst = timezone(timedelta(hours=9)) # 現在のJST時刻を取得 now_jst = datetime.now(jst) # 表示形式を整える print(now_jst.strftime('%Y-%m-%d %H:%M:%S'))
出力例:
2025-10-04 14:33:01
この方法なら、Dockerやクラウド環境などタイムゾーンが不定な環境でも、常にJSTで安定した日時を取得できます。
4. ローカル時間との違いに注意
もし datetime.now() を使うと、実行環境のローカル時間になります。タイムゾーンが明示されていないと、クラウド環境やDockerなどで意図しない時間になることもあるので注意が必要です。
import datetime as dt now_str = dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print(now_str)
これは「現在のローカル時間」を表示しますが、JSTで固定したい場合は timezone(timedelta(hours=9)) を使う方が安全です。
おわりに
UNIXタイムスタンプは一見わかりづらいですが、Pythonで変換すればすぐに人間が読める形式になります。天気APIやセンサーデータなど、時系列データを扱う場面では頻繁に登場するので、変換方法を覚えておくと便利です。