Unixタイムスタンプ変換
Unixタイムスタンプと人間が読める日付の相互変換
時間単位の参考
| 単位 | 秒 |
|---|---|
| 1分 | 60 |
| 1時間 | 3,600 |
| 1日 | 86,400 |
| 1週間 | 604,800 |
| 30日 | 2,592,000 |
| 365日 | 31,536,000 |
| イベント | タイムスタンプ |
|---|---|
| Unixエポック | 0 |
| 10億(2001年9月) | 1,000,000,000 |
| 15億(2017年7月) | 1,500,000,000 |
| 20億(2033年5月) | 2,000,000,000 |
| Y2038(32ビット上限) | 2,147,483,647 |
| 30億(2065年1月) | 3,000,000,000 |
コードで現在のUnixタイムスタンプを取得
JavaScript / TypeScript
Math.floor(Date.now() / 1000) // seconds Date.now() // milliseconds
Python
import time int(time.time()) # seconds
PHP
time() // seconds microtime(true) // with microseconds
Go
time.Now().Unix() // seconds time.Now().UnixMilli() // milliseconds
Ruby
Time.now.to_i # seconds Time.now.to_f # with fractional
Java / Kotlin
System.currentTimeMillis() / 1000 // seconds Instant.now().getEpochSecond() // Java 8+
C# / .NET
DateTimeOffset.UtcNow.ToUnixTimeSeconds() DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
Rust
SystemTime::now() .duration_since(UNIX_EPOCH)?.as_secs()
Swift
Int(Date().timeIntervalSince1970) // seconds
Bash / Shell
date +%s # GNU/Linux date -j +%s # macOS
SQL (PostgreSQL)
SELECT EXTRACT(EPOCH FROM NOW()) SELECT NOW()::timestamp
SQL (MySQL)
SELECT UNIX_TIMESTAMP() SELECT FROM_UNIXTIME(1713024000)
Unix時間とは?
Unix時間(エポック時間、POSIX時間、Unixタイムスタンプとも呼ばれます)は、Unixエポック(1970年1月1日 00:00:00 UTC)からの経過秒数として時刻を追跡するシステムです。1960年代後半にベル研究所でUnixオペレーティングシステムとともに導入され、以来コンピューティングで最も広く使われる時刻表現となっています。
Unixタイムスタンプの最大の利点はその普遍性です。タイムゾーンやロケールに関係なく、同じ絶対的な瞬間を表します。タイムスタンプ1713024000は常に2024年4月14日 00:00:00 UTCを意味します。ニューヨークでも、ロンドンでも、東京でも同じです。これにより、データベースへのタイムスタンプの保存、分散システムの同期、ネットワークを通じた時刻値の送信に最適です。
Unix時間は意図的に閏秒を無視しています。毎日はちょうど86,400秒として扱われます。これにより計算が簡素化されますが、UTCからのわずかなずれが生じます。実際には、その差はごくわずかで、1972年に閏秒が導入されて以来、蓄積された差は30秒未満です。
Unix時間の最も重要な制限は2038年問題でした。初期の実装ではタイムスタンプを32ビット符号付き整数として保存していたため、2,147,483,647(2038年1月19日 03:14:07 UTC)までの値しか表現できませんでした。現代のシステムは主に64ビット整数に移行しており、約2920億年まで範囲が拡張されています。
よくある質問
Unixタイムスタンプとは何ですか?
Unixタイムスタンプは、1970年1月1日 00:00:00 UTC(「Unixエポック」)からの経過秒数です。タイムゾーンに依存しない単一の整数として時点を表します。例えば、タイムスタンプ0は1970年1月1日UTCの深夜、1000000000は2001年9月9日 01:46:40 UTCです。
タイムスタンプが秒かミリ秒かを見分けるには?
桁数を数えてください。10桁の数値は秒(例:1713024000)、13桁の数値はミリ秒(例:1713024000000)です。JavaScriptのDate.now()はミリ秒を返しますが、多くのサーバーサイド言語(Python、PHP、Go、Ruby)は秒を返します。当ツールはフォーマットを自動検出します。
Y2038問題とは何ですか?
Unixタイムスタンプに32ビット符号付き整数を使用するシステムは、2038年1月19日 03:14:07 UTC(タイムスタンプ2,147,483,647)までの時刻しか表現できません。その後、整数がオーバーフローします。現代の64ビットシステムではこの問題は完全に回避され、約2920億年分の日付を表現できます。
Unix時間は閏秒に対応していますか?
いいえ。Unix時間は毎日を正確に86,400秒として扱い、閏秒を完全に無視します。UTCに閏秒が挿入されると、Unix時間は実質的にその1秒を繰り返します。1972年以降の蓄積差は30秒未満で、ほとんどのアプリケーションでは無視できます。
Unix時間はなぜ1970年1月1日から始まるのですか?
この日付は1960年代後半にベル研究所でUnixオペレーティングシステムの開発中に選ばれました。新しい10年の始まりというキリの良い数字で、実用的に十分近い日付であり、32ビット整数で十分な将来の時間をカバーできました。
Unixタイムスタンプは負の値になりますか?
はい。負のUnixタイムスタンプは1970年1月1日より前の日付を表します。例えば、-86400は1969年12月31日を表します。ほとんどのプログラミング言語と当ツールは負のタイムスタンプを正しく処理します。