Python time.localtime()とは?struct_timeに変換する方法
Pythonのtime.localtime()は、秒数の時刻を「年・月・日・時・分・秒」に分解する関数です。
time.time()が返す1789484400.0のような数値は、そのままでは扱えません。localtime()を通すと、年や月を個別に取り出せる形になります。
この記事では、localtime()の使い方と、返ってくるstruct_timeの中身を解説します。
time.localtime()の基本的な使い方
import time
print(time.localtime(1789484400))
実行結果(日本時間の環境):
time.struct_time(tm_year=2026, tm_mon=9, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=259, tm_isdst=0)
引数を省略すると現在時刻が使われます。
import time
now = time.localtime()
print(now.tm_year, "年", now.tm_mon, "月", now.tm_mday, "日")
実行結果(例):
2026 年 9 月 16 日
struct_timeの9つの要素
返ってくるstruct_timeは、次の9つの値を持っています。
| 属性 | 意味 | 範囲 | 例 |
|---|---|---|---|
tm_year |
年 | 4桁 | 2026 |
tm_mon |
月 | 1〜12 | 9 |
tm_mday |
日 | 1〜31 | 16 |
tm_hour |
時 | 0〜23 | 0 |
tm_min |
分 | 0〜59 | 0 |
tm_sec |
秒 | 0〜61 | 0 |
tm_wday |
曜日 | 月曜0〜日曜6 | 2(水曜) |
tm_yday |
年内通算日 | 1〜366 | 259 |
tm_isdst |
サマータイム | 0/1/-1 | 0 |
間違えやすいのが月と曜日の数え方です。
- 月は1から(0始まりではない)
- 曜日は月曜が0で、日曜が6
import time
WEEKDAYS = ["月", "火", "水", "木", "金", "土", "日"]
lt = time.localtime(1789484400)
print(f"{lt.tm_year}年{lt.tm_mon}月{lt.tm_mday}日({WEEKDAYS[lt.tm_wday]})")
実行結果:
2026年9月16日(水)
リストの並びを月曜始まりにしておけば、tm_wdayをそのまま添字に使えます。
タプルとしても使える
struct_timeはタプルの一種なので、番号でもアクセスできます。
import time
lt = time.localtime(1789484400)
print(lt[0], lt[1], lt[2])
print(lt[:3])
print(len(lt))
実行結果:
2026 9 16
(2026, 9, 16)
9
ただし番号でのアクセスは読みにくいため、実際のコードではlt.tm_yearのように属性名で書くことをおすすめします。
値の書き換えはできない
import time
lt = time.localtime()
lt.tm_year = 2027
実行結果:
AttributeError: readonly attribute
タプルと同じく変更できません。値を変えたい場合は、秒数の段階で計算してから変換し直します。
import time
t = 1789484400
tomorrow = time.localtime(t + 86400) # 60*60*24
print(time.strftime("%Y-%m-%d", tomorrow))
実行結果:
2026-09-17
tm_isdstとtm_zone
tm_isdstはサマータイム(夏時間)かどうかを表します。
| 値 | 意味 |
|---|---|
| 0 | サマータイムではない |
| 1 | サマータイム中 |
| -1 | 不明(システムに判断させる) |
日本にはサマータイムがないため、通常は0です。
また、表示はされませんがtm_zoneとtm_gmtoffも持っています。
import time
lt = time.localtime()
print(lt.tm_zone)
print(lt.tm_gmtoff, "秒")
実行結果(日本時間の環境):
JST
32400 秒
32400秒=9時間で、UTCとの時差を表しています。実行環境のタイムゾーンを確認したいときに便利です。
gmtime()との違い
localtime()は実行環境のタイムゾーンで変換します。UTCで扱いたい場合はgmtime()を使います。
import time
t = 1789484400
print(time.localtime(t))
print(time.gmtime(t))
実行結果(日本時間の環境):
time.struct_time(tm_year=2026, tm_mon=9, tm_mday=16, tm_hour=0, ...)
time.struct_time(tm_year=2026, tm_mon=9, tm_mday=15, tm_hour=15, ...)
同じ秒数なのに日付まで違います。日本時間の9月16日0時は、UTCでは9月15日15時だからです。
サーバーのタイムゾーン設定によってlocaltime()の結果は変わるため、環境に依存しない処理ではUTCを使うのが安全です。詳しくは「Python time.gmtime()とは?UTCで時刻を扱う方法」をご覧ください。
秒数に戻す|mktime()
struct_timeから秒数に戻すにはtime.mktime()を使います。
import time
t = 1789484400
lt = time.localtime(t)
print(time.mktime(lt))
実行結果:
1789484400.0
元の値に戻りました。
注意点として、mktime()は引数を「ローカル時刻」として解釈します。gmtime()の結果を渡すと、時差のぶんだけずれます。
import time
import calendar
t = 1789484400
print(time.mktime(time.localtime(t))) # 正しい
print(time.mktime(time.gmtime(t))) # ずれる
print(calendar.timegm(time.gmtime(t))) # UTC用はこちら
実行結果(日本時間の環境):
1789484400.0
1789452000.0
1789484400
2行目は9時間(32400秒)ずれています。UTCのstruct_timeを秒数に戻すときは、calendar.timegm()を使ってください。
| 変換 | ローカル時刻 | UTC |
|---|---|---|
| 秒数 → struct_time | time.localtime() |
time.gmtime() |
| struct_time → 秒数 | time.mktime() |
calendar.timegm() |
datetimeとの使い分け
日付を扱うならdatetimeのほうが便利な場面が多くあります。
import time
from datetime import datetime
t = 1789484400
lt = time.localtime(t)
print(f"{lt.tm_year}-{lt.tm_mon:02d}-{lt.tm_mday:02d}")
d = datetime.fromtimestamp(t)
print(d.strftime("%Y-%m-%d"))
print(d.date())
実行結果:
2026-09-16
2026-09-16
2026-09-16
datetimeなら日付の足し引きや比較がそのままできます。struct_timeは計算ができないため、基本的には「秒数を読む」ための中間形式と考えてください。
- ファイルの更新日時を表示するだけ →
localtime()で十分 - 日付を計算する・比較する →
datetime
datetimeについては「Python datetime.datetime()とは?日時の作り方と使い方」をご覧ください。
time.localtime()のまとめ
localtime()は秒数をstruct_time(9要素)に分解する- 引数を省略すると現在時刻
- 月は1から、曜日は月曜が0
- タプルとしても使えるが、属性名でアクセスするほうが読みやすい
- 値の書き換えはできない
- UTCで扱うなら
gmtime() - 秒数に戻すのは
mktime()(UTCならcalendar.timegm())


