Python Snippets

Python の Unix タイムスタンプ スニペット

現在の Unix 時刻、タイムスタンプから datetime への変換、UTC の扱い、ミリ秒、標準ライブラリを使った整形済み日付出力を行う Python の例。

Current Unix timestamp (seconds)
import time
int(time.time())
Current Unix timestamp (milliseconds)
import time
int(time.time() * 1000)
datetime from timestamp (local)
import datetime
datetime.datetime.fromtimestamp(1700000000)
datetime from timestamp (UTC)
import datetime
datetime.datetime.utcfromtimestamp(1700000000)
# Python 3.2+:
datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc)
Formatted string
import datetime
dt = datetime.datetime.fromtimestamp(1700000000)
dt.strftime("%Y-%m-%d %H:%M:%S")
Timestamp from datetime
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 値はタイムゾーンの意味が暗黙的なので、システムの境界では避けるのが最善です。