1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】struct_timeとZoneInfoの基礎と使い方

1
Last updated at Posted at 2025-06-15

今回は、日付と時刻に関する少し発展的な内容として、以下の2つを学習しました。

  • struct_time:時間情報の構造体(分解して扱える)
  • ZoneInfo:タイムゾーンの扱い方(Python 3.9以降)

後半では、astimezone() というタイムゾーン変換メソッドについてもまとめています。

struct_time:時間情報の構造体

struct_time は、time.localtime()time.gmtime() などの関数で返ってくる時間情報のまとまりです。
タプルのようにインデックスでも、属性名でもアクセスできます。

import time

t = time.localtime()
print(t)

実行例:

time.struct_time(tm_year=2025, tm_mon=6, tm_mday=15, tm_hour=15, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=166, tm_isdst=0)

それぞれの属性は次のような意味があります:

属性名 意味
tm_year 2025
tm_mon 月(1〜12) 6
tm_mday 日(1〜31) 15
tm_hour 時(0〜23) 15
tm_min 分(0〜59) 0
tm_sec 秒(0〜59) 0
tm_wday 曜日(0=月, 6=日) 6
tm_yday 年内通算日(1〜366) 166
tm_isdst サマータイムか否か 0(非対応)

属性へのアクセス例:

print(t.tm_year)   # 2025
print(t.tm_wday)   # 6(日曜日)

日付や時刻を分解して扱いたいときに便利です。

ZoneInfo:タイムゾーンを扱う(Python 3.9以降)

Python 3.9からは zoneinfo モジュールが標準で使えるようになり、タイムゾーン付きの日時処理が可能になりました。

たとえば「UTC」から「日本時間(Asia/Tokyo)」への変換も簡単にできます。

from datetime import datetime
from zoneinfo import ZoneInfo

# タイムゾーンを指定して現在時刻を取得
dt_tokyo = datetime.now(ZoneInfo("Asia/Tokyo"))
dt_utc = datetime.now(ZoneInfo("UTC"))

print("Tokyo:", dt_tokyo)
print("UTC  :", dt_utc)

出力例:

Tokyo: 2025-06-15 15:00:00+09:00  
UTC  : 2025-06-15 06:00:00+00:00

他のタイムゾーンの例

  • "America/New_York"
  • "Europe/London"
  • "Asia/Shanghai"
  • "Asia/Tokyo"

astimezone() でタイムゾーンを変換する

あるタイムゾーンの日時を別のタイムゾーンに変換したいときは、astimezone() メソッドを使います。
このメソッドは、単に tzinfo を変えるだけでなく、実際の時刻を変換してくれる点が重要です。

例:UTC→日本時間

from datetime import datetime
from zoneinfo import ZoneInfo

# UTC時間を作成
dt_utc = datetime(2025, 6, 15, 6, 0, tzinfo=ZoneInfo("UTC"))

# 東京時間に変換
dt_tokyo = dt_utc.astimezone(ZoneInfo("Asia/Tokyo"))

print("UTC時間:", dt_utc)
print("東京時間:", dt_tokyo)

実行結果:

UTC時間: 2025-06-15 06:00:00+00:00  
東京時間: 2025-06-15 15:00:00+09:00

✅ よくある誤解:tzinfo= と astimezone() の違い

  • tzinfo=ZoneInfo(...) → タイムゾーン「情報だけをつける」だけで、時刻の数値はそのまま。
  • astimezone(...) → 実際の時刻を変換する(タイムゾーン間の「時差」を反映して新しい日時を計算)

astimezone のよくある使い道

  • サーバーで記録した UTC 時刻を、ユーザーのタイムゾーンで表示したいとき
  • 国際化対応の Web アプリで、現地時間に変換する必要があるとき
  • ログなどの時刻を「見やすい形」に調整したいとき

おわりに

今回は、Pythonで時刻を扱う際に知っておきたい2つの概念

  • struct_time:時刻情報を分解して取り出すための構造体
  • ZoneInfo:タイムゾーン付きの日時処理(+ astimezone() による変換)

について学習しました。

astimezone() の動作は最初少し混乱しやすいですが、「タイムゾーンを変えると時刻も変わる」という理解が大切だと思いました。
Python 3.9以降でないと zoneinfo は使えないので、使用環境のバージョン確認も忘れずにしたいと思います。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?