Kazuki's Blog

ITは活用する道具である!

🌦️ UNIXタイムスタンプをJSTに変換する方法【Pythonで天気APIを扱うときに便利】

🧩 はじめに

最近、天気データの自動取得と可視化に取り組んでいて、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やセンサーデータなど、時系列データを扱う場面では頻繁に登場するので、変換方法を覚えておくと便利です。