Python UNIX時間(エポック秒)とdatetime変換方法【完全版】
![]() |
20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード |
| |
週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ |
| |
10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks |
UNIX時間(エポック秒)は1970年1月1日0時0分0秒(UTC)からの経過秒数を表す時刻表現です。この記事では、PythonでUNIX時間とdatetimeオブジェクト間の相互変換を詳しく解説します。
目次
UNIX時間の基本概念
UNIX時間は1970年1月1日00:00:00 UTCを基準点(エポック)とした経過秒数です。
import time
from datetime import datetime
# 現在のUNIX時間を取得
unix_time = time.time()
print(f"現在のUNIX時間: {unix_time}") # 1705315825.123456
# エポック(1970-01-01 00:00:00 UTC)の確認
epoch = datetime(1970, 1, 1)
print(f"エポック: {epoch}") # 1970-01-01 00:00:00
datetimeからUNIX時間への変換
timestamp()メソッドを使用
from datetime import datetime, timezone
# ローカル時刻からUNIX時間に変換
dt = datetime(2024, 1, 15, 14, 30, 25)
unix_timestamp = dt.timestamp()
print(f"UNIX時間: {unix_timestamp}") # 1705315825.0
# UTC時刻からUNIX時間に変換
utc_dt = datetime(2024, 1, 15, 5, 30, 25, tzinfo=timezone.utc)
unix_utc = utc_dt.timestamp()
print(f"UTC UNIX時間: {unix_utc}")
time.mktime()を使用
import time
from datetime import datetime
# datetimeオブジェクトからUNIX時間に変換
dt = datetime(2024, 1, 15, 14, 30, 25)
time_tuple = dt.timetuple()
unix_time = time.mktime(time_tuple)
print(f"UNIX時間: {unix_time}")
手動計算による変換
from datetime import datetime, timezone
def datetime_to_unix(dt):
"""datetimeをUNIX時間に変換(手動計算)"""
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
if dt.tzinfo is None:
dt = dt.replace(tzinfo=timezone.utc)
delta = dt - epoch
return delta.total_seconds()
# 使用例
dt = datetime(2024, 1, 15, 14, 30, 25, tzinfo=timezone.utc)
unix_time = datetime_to_unix(dt)
print(f"手動計算UNIX時間: {unix_time}")
UNIX時間からdatetimeへの変換
fromtimestamp()メソッドを使用
from datetime import datetime, timezone
# UNIX時間からローカル時刻に変換
unix_time = 1705315825.123456
dt_local = datetime.fromtimestamp(unix_time)
print(f"ローカル時刻: {dt_local}")
# UNIX時間からUTC時刻に変換
dt_utc = datetime.fromtimestamp(unix_time, tz=timezone.utc)
print(f"UTC時刻: {dt_utc}")
utcfromtimestamp()を使用(非推奨)
from datetime import datetime
# Python 3.12以降で非推奨
unix_time = 1705315825
dt = datetime.utcfromtimestamp(unix_time)
print(f"UTC時刻(非推奨): {dt}")
# 推奨される方法
dt_recommended = datetime.fromtimestamp(unix_time, tz=timezone.utc)
print(f"UTC時刻(推奨): {dt_recommended}")
ミリ秒・マイクロ秒の処理
ミリ秒単位のUNIX時間
from datetime import datetime, timezone
# ミリ秒単位のUNIX時間(JavaScriptなど)
unix_ms = 1705315825123
unix_seconds = unix_ms / 1000
dt = datetime.fromtimestamp(unix_seconds, tz=timezone.utc)
print(f"ミリ秒から変換: {dt}")
# datetimeからミリ秒UNIX時間
dt = datetime(2024, 1, 15, 14, 30, 25, 123000, tzinfo=timezone.utc)
unix_ms = int(dt.timestamp() * 1000)
print(f"ミリ秒UNIX時間: {unix_ms}")
マイクロ秒の精度保持
from datetime import datetime, timezone
# マイクロ秒を含むUNIX時間
unix_time = 1705315825.123456
dt = datetime.fromtimestamp(unix_time, tz=timezone.utc)
print(f"マイクロ秒付き: {dt}")
print(f"マイクロ秒: {dt.microsecond}")
# 精度を指定した変換
def unix_to_datetime_precision(unix_time, precision=6):
"""指定した精度でUNIX時間をdatetimeに変換"""
rounded_time = round(unix_time, precision)
return datetime.fromtimestamp(rounded_time, tz=timezone.utc)
result = unix_to_datetime_precision(1705315825.123456789, 3)
print(f"3桁精度: {result}")
実用的な応用例
ログファイルのタイムスタンプ処理
import re
from datetime import datetime, timezone
def parse_unix_log(log_line):
"""ログ行からUNIX時間を抽出してdatetimeに変換"""
unix_pattern = r'\b(\d{10}(?:\.\d+)?)\b'
def replace_unix_time(match):
unix_time = float(match.group(1))
dt = datetime.fromtimestamp(unix_time, tz=timezone.utc)
return dt.strftime('%Y-%m-%d %H:%M:%S UTC')
return re.sub(unix_pattern, replace_unix_time, log_line)
# 使用例
log = "Error occurred at 1705315825.123"
converted = parse_unix_log(log)
print(converted) # Error occurred at 2024-01-15 05:30:25 UTC
APIレスポンスの時刻変換
import json
from datetime import datetime, timezone
def convert_unix_timestamps(data):
"""辞書内のUNIX時間をdatetimeに変換"""
if isinstance(data, dict):
for key, value in data.items():
if key.endswith('_at') or key.endswith('_time'):
if isinstance(value, (int, float)):
data[key] = datetime.fromtimestamp(value, tz=timezone.utc)
elif isinstance(value, (dict, list)):
convert_unix_timestamps(value)
elif isinstance(data, list):
for item in data:
convert_unix_timestamps(item)
# 使用例
api_data = {
'id': 1,
'created_at': 1705315825,
'updated_at': 1705315900.123,
'user': {
'last_login_time': 1705315800
}
}
convert_unix_timestamps(api_data)
print(api_data['created_at']) # datetime object
時刻範囲の指定
from datetime import datetime, timezone, timedelta
def get_unix_time_range(days_ago=7):
"""指定日数前からの時刻範囲をUNIX時間で取得"""
now = datetime.now(timezone.utc)
start_time = now - timedelta(days=days_ago)
return {
'start_unix': int(start_time.timestamp()),
'end_unix': int(now.timestamp()),
'start_datetime': start_time,
'end_datetime': now
}
# 過去1週間の範囲
range_data = get_unix_time_range(7)
print(f"開始: {range_data['start_unix']}")
print(f"終了: {range_data['end_unix']}")
タイムゾーンの考慮
異なるタイムゾーンでの変換
from datetime import datetime, timezone, timedelta
# 日本標準時(JST)
jst = timezone(timedelta(hours=9))
dt_jst = datetime(2024, 1, 15, 14, 30, 25, tzinfo=jst)
unix_jst = dt_jst.timestamp()
# UTC
dt_utc = datetime(2024, 1, 15, 5, 30, 25, tzinfo=timezone.utc)
unix_utc = dt_utc.timestamp()
print(f"JST UNIX時間: {unix_jst}")
print(f"UTC UNIX時間: {unix_utc}")
print(f"同じ値: {unix_jst == unix_utc}") # True
ローカルタイムゾーンの自動処理
from datetime import datetime
import time
def safe_unix_to_datetime(unix_time, use_utc=True):
"""安全なUNIX時間変換"""
try:
if use_utc:
return datetime.fromtimestamp(unix_time, tz=timezone.utc)
else:
return datetime.fromtimestamp(unix_time)
except (ValueError, OSError) as e:
print(f"変換エラー: {unix_time} - {e}")
return None
# 使用例
valid_time = 1705315825
invalid_time = -1
result1 = safe_unix_to_datetime(valid_time)
result2 = safe_unix_to_datetime(invalid_time)
print(f"有効: {result1}")
print(f"無効: {result2}")
パフォーマンスの比較
import time
from datetime import datetime, timezone
# 変換方法のパフォーマンステスト
unix_times = [1705315825 + i for i in range(100000)]
# fromtimestamp()のテスト
start = time.time()
for unix_time in unix_times:
dt = datetime.fromtimestamp(unix_time, tz=timezone.utc)
print(f"fromtimestamp: {time.time() - start:.3f}秒")
# timestamp()のテスト
datetimes = [datetime.fromtimestamp(t, tz=timezone.utc) for t in unix_times[:1000]]
start = time.time()
for dt in datetimes:
unix_time = dt.timestamp()
print(f"timestamp: {time.time() - start:.3f}秒")
まとめ
- 変換方法:
- datetime → UNIX:
timestamp() - UNIX → datetime:
fromtimestamp()
- datetime → UNIX:
- タイムゾーン:UTC指定を推奨
- 精度:ミリ秒・マイクロ秒の処理に注意
- エラー処理:無効な値に対する適切なハンドリング
- 実用例:ログ処理、API変換、時刻範囲指定など
UNIX時間の理解と適切な変換処理により、システム間での時刻データ交換が効率的に行えます。
■「らくらくPython塾」が切り開く「呪文コーディング」とは?
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座
![]() |
20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード |
| |
週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ |
| |
10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks |




