Python の Unix タイムスタンプ スニペット
現在の Unix 時刻、タイムスタンプから datetime への変換、UTC の扱い、ミリ秒、標準ライブラリを使った整形済み日付出力を行う Python の例。
import time
int(time.time())import time
int(time.time() * 1000)import datetime
datetime.datetime.fromtimestamp(1700000000)import datetime
datetime.datetime.utcfromtimestamp(1700000000)
# Python 3.2+:
datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc)import datetime
dt = datetime.datetime.fromtimestamp(1700000000)
dt.strftime("%Y-%m-%d %H:%M:%S")import datetime
dt = datetime.datetime(2023, 11, 15, 6, 13, 20, tzinfo=datetime.timezone.utc)
int(dt.timestamp())Python のタイムスタンプの基本
Python の time.time() は、Unix エポックからの秒数を浮動小数点数として返します。整数の Unix 秒には int() で囲み、ミリ秒が必要なときは 1000 を掛けます。
タイムゾーン対応の datetime 出力
明示的な UTC 出力には datetime.fromtimestamp(ts, tz=datetime.timezone.utc) を使います。ログ、API、データベース行の値を生成するとき、サーバーのローカルタイムゾーンに依存しないようにします。
Python の本番運用メモ
Python では naive な datetime とタイムゾーン対応の datetime の両方を簡単に作れるため、システム境界を越えるのがどちらかを意識してください。API、スケジュールジョブ、データベース書き込みにはタイムゾーン対応の UTC datetime を使います。ローカルタイムゾーンへの変換は、表示、レポート、またはローカルカレンダーに明示的に依存するビジネスルールのときだけにします。
- スクリプトやコマンドラインツールでは int(time.time()) を整数の Unix 秒に使う
- 受信側がミリ秒を期待するときだけ int(time.time() * 1000) を使う
- 移植性のある出力には、ローカルの fromtimestamp ではなく datetime.fromtimestamp(ts, tz=timezone.utc) を使う
- ログや JSON に読みやすい UTC 値が必要なときは .isoformat() を使う
Python の datetime today:datetime.today() と datetime.now()
よくある Python の検索「datetime today python」「today timestamp python」「datetime now python utc」は datetime モジュールで答えられます。datetime.today() と datetime.now() はほぼ同じで、どちらも naive なローカル datetime を返します。最新のコードでは、安全に Unix タイムスタンプへ変換できるタイムゾーン対応の UTC 値を返す datetime.now(timezone.utc) を優先してください。
- datetime.today() → ローカルタイムゾーンの naive な datetime(tzinfo は付かない)
- datetime.now() → tz 引数を渡さない限り today() と同じ
- datetime.now(timezone.utc) → タイムゾーン対応の UTC datetime(新しいコードで推奨)
- datetime.now(timezone.utc).timestamp() → 現在の Unix エポック秒を float で
- date.today() → 時刻成分のない今日の日付(datetime ではなく date オブジェクト)
- int(time.time()) → 現在の Unix 秒を int で — 最も短い形
- time.time_ns() → 現在のエポックナノ秒(Python 3.7+)
Python の文字列から datetime へ、datetime から文字列へ
「string to datetime python」「py datetime to string」「datetime to string」を検索する Python ユーザーは、strptime/strftime または datetime.fromisoformat() を求めています。ISO 8601 入力には fromisoformat() を使います(Python 3.7+;3.11 は UTC オフセットを含む完全な ISO 8601 に対応)。
- 文字列から datetime(Python):datetime.fromisoformat('2024-03-15T14:30:00+00:00') — ISO 8601 に推奨
- 文字列から datetime(Python、カスタム形式):datetime.strptime('2024-03-15 14:30:00', '%Y-%m-%d %H:%M:%S')
- Py datetime to string / datetime to string:dt.isoformat() は '2024-03-15T14:30:00+00:00' を返す
- Py datetime to string(カスタム形式):dt.strftime('%Y-%m-%d %H:%M:%S') は '2024-03-15 14:30:00' を返す
- ISO 8601 のラウンドトリップ:datetime.fromisoformat(s).isoformat() — 同じ文字列を返す
- Unix タイムスタンプには:dt.timestamp()(秒の float);整数秒には int(dt.timestamp())
- Python convert string to date / convert string to date — ISO 8601 には datetime.fromisoformat(s);カスタム形式には datetime.strptime(s, fmt)
- Python の日付のみ出力:date.fromisoformat('2024-03-15') は date オブジェクトを返す(時刻なし)
FAQ
- time.time() は整数を返すのか?
- いいえ。秒を浮動小数点値として返します。整数の Unix 秒には int() で包み、ミリ秒が必要なときは丸める前に掛けてください。
- datetime の値は naive と aware のどちらにすべきか?
- API、データベース、ログにはタイムゾーン対応(aware)の UTC datetime 値を使ってください。naive な datetime 値はタイムゾーンの意味が暗黙的なので、システムの境界では避けるのが最善です。