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())

あわせて読みたい

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら