UNIX時間変換
現在のUNIXタイムスタンプ:
タイムスタンプから日付への変換
日付からタイムスタンプへの変換
UNIX時間について
UNIX時間(UNIXタイムスタンプ)は、1970年1月1日 00:00:00 UTC からの経過秒数です。
特徴:
- 世界中で統一された時間表現方法
- タイムゾーンに依存しない
- コンピュータシステムで広く使用
一般的な形式:
- 秒単位: 10桁 (例: 1733991557)
- ミリ秒単位: 13桁
- マイクロ秒単位: 16桁
UNIX時間(UNIXタイムスタンプ)は、1970年1月1日 00:00:00 UTC からの経過秒数です。
UNIX時間(UNIXタイムスタンプ)は、コンピュータシステムにおける時間表現の標準的な方法です。1970年1月1日 00:00:00 UTC(協定世界時)からの経過秒数として定義され、「エポック時間」とも呼ばれています。
UNIX時間は1970年代初頭にUNIXオペレーティングシステムの開発過程で採用されました。当時のコンピュータハードウェアの制約と、32ビット符号付き整数での効率的な時間表現を可能にするため、1970年1月1日が起点として選ばれました。このシンプルな時間表現方式は、その後ほぼすべてのコンピュータシステムで採用されるようになりました。
32ビット符号付き整数でUNIX時間を表現する場合、表現できる最大値は2,147,483,647です。これは2038年1月19日 03:14:07 UTCに相当します。この時点を超えると、32ビットシステムでは整数オーバーフローが発生し、時間が1901年12月13日に巻き戻ったように表示される可能性があります。これは「2038年問題」または「Y2K38問題」と呼ばれています。
現代のシステムの多くは64ビット整数でUNIX時間を扱うようになり、この問題は軽減されていますが、古いシステムやエンベデッドシステムでは依然として潜在的な問題となっています。
様々なプログラミング言語でUNIX時間を取得・操作する方法を紹介します。
// 現在のUNIXタイムスタンプを取得(秒)
Math.floor(Date.now() / 1000)
// 現在のUNIXタイムスタンプを取得(ミリ秒)
Date.now()
// タイムスタンプから日時を生成
new Date(timestamp * 1000)
// 現在のUNIXタイムスタンプを取得
time();
// 日時文字列からタイムスタンプを生成
strtotime('2023-01-01 12:00:00');
// タイムスタンプから日時を生成
date('Y-m-d H:i:s', $timestamp);
import time
from datetime import datetime
# 現在のUNIXタイムスタンプを取得
timestamp = time.time()
# 日時オブジェクトからタイムスタンプを生成
dt = datetime(2023, 1, 1, 12, 0)
timestamp = dt.timestamp()
# タイムスタンプから日時を生成
dt = datetime.fromtimestamp(timestamp)
// 現在のUNIXタイムスタンプを取得(ミリ秒)
long timestamp = System.currentTimeMillis();
// 秒単位のタイムスタンプ
long timestampSeconds = timestamp / 1000;
// タイムスタンプから日時を生成
java.util.Date date = new java.util.Date(timestamp);
サーバーログやアプリケーションのログ記録にUNIXタイムスタンプを使用することで、異なるシステム間でのイベント順序の正確な比較が可能になります。タイムゾーンの違いによる混乱を避け、ミリ秒単位の高精度なタイムスタンプでイベントの順序を正確に把握できます。
JWTなどのトークンベースの認証システムでは、トークンの有効期限をUNIXタイムスタンプで設定するのが一般的です。また、タイムベースドワンタイムパスワード(TOTP)など、時間に基づくセキュリティプロトコルでもUNIX時間が基礎として使用されています。
多くのデータベースシステムでは、タイムスタンプをUNIX時間として内部的に保存することで、ストレージ効率を高め、タイムゾーンに依存しない一貫した時間表現を実現しています。特に大規模データセットやタイムシリーズデータでは、この効率性が重要になります。
異なるシステム間のAPI通信やデータ交換では、日時情報をUNIXタイムスタンプとして送受信することが多いです。これにより、タイムゾーンや日付形式の違いによる誤解を防ぎ、一貫したデータ解釈を保証します。
UNIXタイムスタンプは1970年1月1日からの経過秒数を表す数値です。対してISO 8601は「2023-01-01T12:00:00Z」のように人間が読みやすい形式で日時を表現する国際標準規格です。
UNIXタイムスタンプは計算処理に適しており、コンピュータ内部での処理や保存に効率的です。一方、ISO 8601形式は人間が理解しやすく、多くのAPIやデータ交換フォーマットで使用されています。
UNIXタイムスタンプの桁数は精度によって異なります:
より高い精度が必要な場合(例:高速取引システムやパフォーマンス測定)は、ミリ秒やマイクロ秒単位のタイムスタンプが使用されます。一般的な用途では秒単位(10桁)で十分です。
UNIX時間自体はUTC基準で、タイムゾーンの概念を持ちません。タイムゾーンを考慮するのは、UNIX時間から人間が読める日時に変換する際、または逆に特定のタイムゾーンの日時からUNIX時間に変換する際に行います。
例えば、日本時間(JST)の2023年1月1日12:00:00からUNIX時間に変換する場合:
逆に、UNIXタイムスタンプから特定のタイムゾーンの日時に変換する際も、同様の調整が必要です。このページのツールでは、こうした変換を自動的に行います。
負のUNIXタイムスタンプは、1970年1月1日 00:00:00 UTCより前の時間を表します。例えば、-86400は1969年12月31日 00:00:00 UTCを示します。
歴史的なデータや過去のイベントを記録する際に負のタイムスタンプが使用されることがありますが、一部のシステムや言語では負のタイムスタンプの処理に制限がある場合があるので注意が必要です。
閏秒(うるう秒)は、地球の自転速度の変化に合わせて調整される1秒の追加で、世界協定時(UTC)では時々挿入されます。
UNIX時間では、閏秒は標準的には考慮されていません。多くのシステムでは、閏秒が挿入される際には、その秒をUNIX時間としてカウントせず「スマージング」と呼ばれる方法で処理します。例えば、最後の59秒を少し長くするか、追加された秒を59.5秒として扱うなどの方法があります。
この処理方法はシステムによって異なるため、高精度の時間計測が必要な科学的・金融的アプリケーションでは注意が必要です。
以下は特定の日時に対応するUNIXタイムスタンプの一覧です。歴史的な瞬間や区切りの良いタイムスタンプを確認できます。
日時(UTC) | UNIXタイムスタンプ | 備考 |
---|---|---|
1970-01-01 00:00:00 | 0 | UNIX時間の基準点(エポック) |
2000-01-01 00:00:00 | 946684800 | 2000年の始まり |
2001-09-11 01:46:40 | 1000000000 | 10億秒の節目 |
2009-02-13 23:31:30 | 1234567890 | 連続する数字のタイムスタンプ |
2038-01-19 03:14:07 | 2147483647 | 32ビット符号付き整数の最大値(2038年問題) |
2038-01-19 03:14:08 | 2147483648 | 32ビット符号付き整数の限界を超える最初の秒 |
2106-02-07 06:28:15 | 4294967295 | 32ビット符号なし整数の最大値 |