Guide

Unix タイムスタンプとは何ですか?エポックタイムの完全ガイド

Unix タイムスタンプとは何ですか?

Unix タイムスタンプ (Unix 時間POSIX 時間、または エポック時間 とも呼ばれる) は、時間を単一の数値として追跡するためのシステムです。 **1970 年 1 月 1 日の 00:00:00 UTC から経過した秒数を表します (閏秒を除く)。この瞬間は Unix エポック と呼ばれます。

たとえば、Unix タイムスタンプ「1704067200」は、「2024 年 1 月 1 日、00:00:00 UTC」を表します。

主な特徴

  • シンプル: 任意の時点を表す 1 つの数字だけ
  • ユニバーサル: すべてのタイムゾーンとシステムで同じように動作します。
  • 効率的: 保存、比較、計算が簡単
  • 標準化: プログラミング言語とデータベース全体で広く採用されています

Unix タイムスタンプが 1970 年 1 月 1 日から始まるのはなぜですか?

Unix タイムスタンプは 1970 年 1 月 1 日から始まります。これは、Unix オペレーティング システム が開発された時期だからです。開発者は時間システムの基準点を必要としていたため、覚えやすい最近の丸い日付を選択しました。

この日付は、Unix エポック または エポック時間 として知られています。すべての Unix タイムスタンプは、この瞬間からの秒数として計算されます。

歴史的背景

  • 1969-1970: ベル研究所での Unix オペレーティング システム開発
  • シンプルさの必要性: 開発者は時間を追跡する簡単な方法を望んでいました。
  • 32 ビット システム: 元々は 32 ビット整数で動作するように設計されていました。
  • 幅広い採用: コンピューター時刻管理の標準になりました

Unix タイムスタンプの仕組み

基本的な考え方

Unix タイムスタンプは、1 秒ごとに 1 ずつ増加する単なるカウンターです。

Unix Epoch (Start):  0          → January 1, 1970, 00:00:00 UTC
After 1 second:      1          → January 1, 1970, 00:00:01 UTC
After 1 hour:        3600       → January 1, 1970, 01:00:00 UTC
After 1 day:         86400      → January 2, 1970, 00:00:00 UTC
After 1 year:        31536000   → January 1, 1971, 00:00:00 UTC
Today (2025):        ~1735689600 → Current time

精度レベル

Unix タイムスタンプにはさまざまな精度レベルを指定できます。

精度数字説明
101704067200標準 Unix タイムスタンプ
ミリ秒131704067200000JavaScript、Java で使用
マイクロ秒161704067200000000高精度システム
ナノ秒191704067200000000000超高精度のタイミング

さまざまなプログラミング言語での Unix タイムスタンプ

JavaScript / Node.js

// Get current Unix timestamp (milliseconds)
const timestamp = Date.now();
console.log(timestamp); // 1704067200000

// Get Unix timestamp in seconds
const timestampSeconds = Math.floor(Date.now() / 1000);
console.log(timestampSeconds); // 1704067200

// Convert Unix timestamp to Date
const date = new Date(1704067200000);
console.log(date); // 2024-01-01T00:00:00.000Z

// Convert Date to Unix timestamp
const timestamp2 = new Date('2024-01-01').getTime();
console.log(timestamp2); // 1704067200000

パイソン

import time
from datetime import datetime

# Get current Unix timestamp
timestamp = time.time()
print(timestamp)  # 1704067200.123456

# Get Unix timestamp (integer)
timestamp_int = int(time.time())
print(timestamp_int)  # 1704067200

# Convert Unix timestamp to datetime
dt = datetime.fromtimestamp(1704067200)
print(dt)  # 2024-01-01 00:00:00

# Convert datetime to Unix timestamp
timestamp2 = datetime(2024, 1, 1).timestamp()
print(timestamp2)  # 1704067200.0

PHP

<?php
// Get current Unix timestamp
$timestamp = time();
echo $timestamp; // 1704067200

// Convert Unix timestamp to date
$date = date('Y-m-d H:i:s', 1704067200);
echo $date; // 2024-01-01 00:00:00

// Convert date to Unix timestamp
$timestamp2 = strtotime('2024-01-01');
echo $timestamp2; // 1704067200
?>

Java

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;

// Get current Unix timestamp (seconds)
long timestamp = Instant.now().getEpochSecond();
System.out.println(timestamp); // 1704067200

// Get Unix timestamp (milliseconds)
long timestampMillis = System.currentTimeMillis();
System.out.println(timestampMillis); // 1704067200000

// Convert Unix timestamp to LocalDateTime
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(
    1704067200, 0, ZoneOffset.UTC
);
System.out.println(dateTime); // 2024-01-01T00:00:00

// Convert LocalDateTime to Unix timestamp
long timestamp2 = dateTime.toEpochSecond(ZoneOffset.UTC);
System.out.println(timestamp2); // 1704067200

### 行く

package main

import (
    "fmt"
    "time"
)

func main() {
    // Get current Unix timestamp
    timestamp := time.Now().Unix()
    fmt.Println(timestamp) // 1704067200

    // Convert Unix timestamp to Time
    t := time.Unix(1704067200, 0)
    fmt.Println(t) // 2024-01-01 00:00:00 +0000 UTC

    // Convert Time to Unix timestamp
    timestamp2 := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC).Unix()
    fmt.Println(timestamp2) // 1704067200
}

Unix タイムスタンプの利点

1. シンプルさ

単一の数値は、複雑な日付/時刻文字列よりも扱いやすいです。

2. タイムゾーンの独立性

Unix タイムスタンプは常に UTC であるため、タイムゾーンの混乱を避けることができます。

3. 簡単な計算

単純な減算によって時差を計算します。

const start = 1704067200; // Jan 1, 2024
const end = 1704153600;   // Jan 2, 2024
const difference = end - start; // 86400 seconds = 1 day

4. 効率的なストレージ

単一の整数を保存する方が、日付文字列を保存するよりも効率的です。

5. 並べ替えと比較

タイムスタンプの並べ替えと比較が簡単:

const timestamps = [1704153600, 1704067200, 1704240000];
timestamps.sort((a, b) => a - b); // Chronological order

Unix タイムスタンプの制限

1. 2038 年問題

32 ビット システムでは、Unix タイムスタンプは 2038 年 1 月 19 日、03:14:07 UTC にオーバーフローします。これは、32 ビットの符号付き整数は 2,147,483,647 までの値しか表現できないためです。

解決策: はるか未来の日付を表すことができる 64 ビットのタイムスタンプを使用します。

2. うるう秒

Unix タイムスタンプはうるう秒を無視します。うるう秒は、地球の不規則な回転を考慮して UTC に追加されることがあります。

3. 精度の制限

標準の Unix タイムスタンプ (秒) は、一部のアプリケーションでは正確ではない可能性があります。精度を高めるには、ミリ秒またはマイクロ秒を使用します。

4. 人間による可読性

Unix タイムスタンプは人間が判読できるものではありません。意味のある日付を表示するには、それらを変換する必要があります。

一般的な使用例

1. データベースのタイムスタンプ

作成時間と変更時間を効率的に保存します。

CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50),
    created_at BIGINT,
    updated_at BIGINT
);

2. API レスポンス

API 応答にタイムスタンプを含めます。

{
  "id": 123,
  "message": "Hello World",
  "timestamp": 1704067200,
  "created_at": 1704067200
}

3. ログファイル

イベントがいつ発生したかを追跡します。

[1704067200] INFO: User logged in
[1704067205] WARNING: Failed login attempt
[1704067210] ERROR: Database connection failed

4. キャッシュと有効期限

キャッシュの有効期限を設定します。

const cacheExpiry = Date.now() / 1000 + 3600; // Expire in 1 hour

5. セッション管理

ユーザーセッションのタイムスタンプを追跡します。

const sessionStart = Math.floor(Date.now() / 1000);
const sessionExpiry = sessionStart + 1800; // 30 minutes

ベストプラクティス

1. 常に UTC を使用する

タイムゾーンの問題を避けるために、Unix タイムスタンプを UTC で保存します。

2. 適切な精度を選択する

  • ほとんどのアプリケーションでは を使用します
  • Web アプリケーション (JavaScript) には ミリ秒 を使用します
  • 高精度のタイミングには マイクロ秒 または ナノ秒 を使用します

3. 64 ビット整数を使用する

64 ビットのタイムスタンプを使用して、2038 年問題を回避します。

4. タイムスタンプを検証する

タイムスタンプが妥当な範囲内であるかどうかを確認します。

function isValidTimestamp(timestamp) {
    const min = 0; // Unix epoch
    const max = 2147483647; // Year 2038 for 32-bit
    return timestamp >= min && timestamp <= max;
}

5. 文書の精度

タイムスタンプが秒、ミリ秒、またはその他の単位であるかどうかを必ず文書化してください。

Unix タイムスタンプの変換

オンラインツール

MakeTimestamp.com を使用して、Unix タイムスタンプを人間が判読できる日付に変換したり、その逆を行ったりできます。

コマンドライン

Linux/Mac:

# Current Unix timestamp
date +%s

# Convert Unix timestamp to date
date -d @1704067200

# Convert date to Unix timestamp
date -d "2024-01-01" +%s

Windows PowerShell:

powershell
# Current Unix timestamp
[int][double]::Parse((Get-Date -UFormat %s))

# Convert Unix timestamp to date
[DateTimeOffset]::FromUnixTimeSeconds(1704067200).DateTime

関連概念

ISO 8601

標準化された日付/時刻形式: 2024-01-01T00:00:00Z

RFC 3339

インターネット タイムスタンプ形式: 2024-01-01T00:00:00+00:00

POSIX 時間

POSIX 標準によって定義された Unix 時間の別名。

エポックタイム

特定の開始点 (エポック) から計測される時間の総称。

よくある質問

Unix タイムスタンプ 0 は何を表しますか?

Unix タイムスタンプ「0」は、Unix エポック: 1970 年 1 月 1 日、00:00:00 UTC を表します。

Unix タイムスタンプは負の値になる可能性がありますか?

はい!負の Unix タイムスタンプは、1970 年 1 月 1 日より前の日付を表します。たとえば、-86400 は 1969 年 12 月 31 日を表します。

一部のタイムスタンプが 13 桁なのはなぜですか?

13 桁のタイムスタンプは ミリ秒 (JavaScript で一般的に使用されます) 単位ですが、10 桁のタイムスタンプは 単位です。

秒とミリ秒の間で変換するにはどうすればよいですか?

  • 秒からミリ秒: 1000 を掛けます。
  • ミリ秒から秒: 1000 で割ります。

2038 年以降はどうなるのでしょうか?

64 ビット システムでは、Unix タイムスタンプは 292,277,026,596 年までの日付を表すことができます。 32 ビット システムでは、アップグレードするか、別の時刻表現を使用する必要があります。

Unix タイムスタンプはタイムゾーンの影響を受けますか?

いいえ! Unix タイムスタンプは常に UTC です。タイムゾーンは、タイムスタンプを人間が判読できる日付として表示する場合にのみ適用されます。

概要

Unix タイムスタンプは、時間を単一の数値として表現するためのシンプルかつ効率的かつ汎用的な方法です。 1970 年 1 月 1 日 (Unix エポック) からの秒数をカウントし、プログラミング、データベース、API で広く使用されています。

重要なポイント:

  • Unix タイムスタンプ = 1970 年 1 月 1 日、00:00:00 UTC からの秒数
  • シンプル、普遍的、そして効率的な時間追跡
  • 複数の精度レベル (秒、ミリ秒など) で利用可能
  • 32 ビット システムでは 2038 年問題に注意してください
  • タイムスタンプを常に UTC で保存します

Unix タイムスタンプを使用する準備はできましたか? Unix タイムスタンプ コンバーター を試して、タイムスタンプと人間が判読できる日付の間で即座に変換してください。