UNIX時間変換

現在のUNIXタイムスタンプ:
秒単位:
ミリ秒単位:
タイムスタンプから日付への変換
秒単位、ミリ秒単位、マイクロ秒単位に対応
UTC時間:
日本時間:
相対時間:
日付からタイムスタンプへの変換
UNIXタイムスタンプ (秒):
UNIXタイムスタンプ (ミリ秒):
UNIX時間について

UNIX時間(UNIXタイムスタンプ)は、1970年1月1日 00:00:00 UTC からの経過秒数です。

特徴:
  • 世界中で統一された時間表現方法
  • タイムゾーンに依存しない
  • コンピュータシステムで広く使用
一般的な形式:
  • 秒単位: 10桁 (例: 1733991557)
  • ミリ秒単位: 13桁
  • マイクロ秒単位: 16桁

UNIX時間(タイムスタンプ)の基礎知識

UNIX時間とは

UNIX時間(UNIXタイムスタンプ)は、コンピュータシステムにおける時間表現の標準的な方法です。1970年1月1日 00:00:00 UTC(協定世界時)からの経過秒数として定義され、「エポック時間」とも呼ばれています。

UNIX時間の歴史と背景

UNIX時間は1970年代初頭にUNIXオペレーティングシステムの開発過程で採用されました。当時のコンピュータハードウェアの制約と、32ビット符号付き整数での効率的な時間表現を可能にするため、1970年1月1日が起点として選ばれました。このシンプルな時間表現方式は、その後ほぼすべてのコンピュータシステムで採用されるようになりました。

UNIX時間の限界:2038年問題

32ビット符号付き整数でUNIX時間を表現する場合、表現できる最大値は2,147,483,647です。これは2038年1月19日 03:14:07 UTCに相当します。この時点を超えると、32ビットシステムでは整数オーバーフローが発生し、時間が1901年12月13日に巻き戻ったように表示される可能性があります。これは「2038年問題」または「Y2K38問題」と呼ばれています。

現代のシステムの多くは64ビット整数でUNIX時間を扱うようになり、この問題は軽減されていますが、古いシステムやエンベデッドシステムでは依然として潜在的な問題となっています。

UNIX時間の活用場面

プログラミングでの活用

様々なプログラミング言語でUNIX時間を取得・操作する方法を紹介します。

JavaScript
// 現在のUNIXタイムスタンプを取得(秒)
Math.floor(Date.now() / 1000)

// 現在のUNIXタイムスタンプを取得(ミリ秒)
Date.now()

// タイムスタンプから日時を生成
new Date(timestamp * 1000)
PHP
// 現在のUNIXタイムスタンプを取得
time();

// 日時文字列からタイムスタンプを生成
strtotime('2023-01-01 12:00:00');

// タイムスタンプから日時を生成
date('Y-m-d H:i:s', $timestamp);
Python
import time
from datetime import datetime

# 現在のUNIXタイムスタンプを取得
timestamp = time.time()

# 日時オブジェクトからタイムスタンプを生成
dt = datetime(2023, 1, 1, 12, 0)
timestamp = dt.timestamp()

# タイムスタンプから日時を生成
dt = datetime.fromtimestamp(timestamp)
Java
// 現在の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・データ通信

異なるシステム間のAPI通信やデータ交換では、日時情報をUNIXタイムスタンプとして送受信することが多いです。これにより、タイムゾーンや日付形式の違いによる誤解を防ぎ、一貫したデータ解釈を保証します。

よくある質問(FAQ)

UNIXタイムスタンプは1970年1月1日からの経過秒数を表す数値です。対してISO 8601は「2023-01-01T12:00:00Z」のように人間が読みやすい形式で日時を表現する国際標準規格です。

UNIXタイムスタンプは計算処理に適しており、コンピュータ内部での処理や保存に効率的です。一方、ISO 8601形式は人間が理解しやすく、多くのAPIやデータ交換フォーマットで使用されています。

UNIXタイムスタンプの桁数は精度によって異なります:

  • 10桁: 秒単位の精度(例: 1733991557)
  • 13桁: ミリ秒単位の精度(例: 1733991557000)
  • 16桁: マイクロ秒単位の精度(例: 1733991557000000)

より高い精度が必要な場合(例:高速取引システムやパフォーマンス測定)は、ミリ秒やマイクロ秒単位のタイムスタンプが使用されます。一般的な用途では秒単位(10桁)で十分です。

UNIX時間自体はUTC基準で、タイムゾーンの概念を持ちません。タイムゾーンを考慮するのは、UNIX時間から人間が読める日時に変換する際、または逆に特定のタイムゾーンの日時からUNIX時間に変換する際に行います。

例えば、日本時間(JST)の2023年1月1日12:00:00からUNIX時間に変換する場合:

  1. まず日本時間の日時オブジェクトを作成
  2. この日時はUTCより9時間進んでいるため、UTC時間に変換するには9時間引く
  3. その結果得られたUTC時間を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タイムスタンプ変換表

以下は特定の日時に対応する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ビット符号なし整数の最大値