Epoch Time:Unixタイムスタンプの基礎

エポックタイムとは正確には何ですか?

プログラミングで日付と時刻を扱ったことがあれば、Unixタイムスタンプに遭遇したことがあるでしょう。しかし、それらは実際には何で、なぜ使用するのでしょうか?

Unixエポックタイム(Unix時間、POSIX時間、または単に「エポック」とも呼ばれます)は、1970年1月1日の午前0時UTC(協定世界時)から経過した秒数として、特定の瞬間を表します。この特定の瞬間は「Unixエポック」または「エポックゼロ」として知られています。

簡単な例: 現在のUnixタイムスタンプが1728773400の場合、1970年1月1日の午前0時から正確に1,728,773,400秒が経過したことを意味します。

なぜ1970年1月1日なのですか?

この日付は恣意的に見えるかもしれませんが、1970年代初頭にベル研究所でUnixが開発されていた時に選ばれました。開発者は時間追跡システムの一貫した開始点が必要で、1970年1月1日はプロジェクトに取り組んでいた時期に近かったのです。それ以来、普遍的な標準となっています。

フォーマットの理解

Unixタイムスタンプは、必要な精度に応じて異なるフォーマットがあります:

  • 秒(10桁): 標準フォーマット、例えば1728773400
  • ミリ秒(13桁): より高い精度のため、例えば1728773400000
  • マイクロ秒(16桁): 超精密なタイミングのため、例えば1728773400000000

秒単位での一般的な時間間隔

これらの一般的な間隔を理解することで、タイムスタンプをより直感的に扱うことができます:

時間期間 簡単な計算
1時間 3,600 60 × 60
1日 86,400 24 × 3,600
1週間 604,800 7 × 86,400
1ヶ月(平均) 2,629,743 30.44 × 86,400
1年(平均) 31,556,926 365.24 × 86,400

2038年問題(Y2038)

重要なことがあります: 多くのシステムはUnixタイムスタンプを32ビット符号付き整数として保存しています。これはY2Kバグに似た問題を引き起こします。

32ビット符号付き整数は2,147,483,647秒までしかカウントできません。2038年1月19日03:14:07 UTCに達すると、このカウンターはオーバーフローして負の数に戻り、システム障害やバグを引き起こす可能性があります。

重要: 最新のシステムは64ビットタイムスタンプに移行しており、これは今後2920億年間オーバーフローしません。アプリケーションでタイムスタンプの保存に64ビット整数を使用するようにしてください!

現在のエポックタイムの取得

すべてのプログラミング言語には、現在のUnixタイムスタンプを取得する独自の方法があります。最も一般的な方法は次のとおりです:

Web開発

JavaScript

// ミリ秒単位でタイムスタンプを取得し、秒単位にするには1000で割る
const timestamp = Math.floor(Date.now() / 1000);

// 別の方法
const timestamp = Math.floor(new Date().getTime() / 1000);

PHP

// シンプルで直感的
$timestamp = time();

// DateTimeを使用(より柔軟)
$timestamp = (new DateTime())->getTimestamp();

バックエンド言語

Python

import time

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

# datetimeモジュールを使用
from datetime import datetime
timestamp = int(datetime.now().timestamp())

Java

// ミリ秒を返すので、秒単位にするには1000で割る
long timestamp = System.currentTimeMillis() / 1000;

// Instantを使用(Java 8以降)
long timestamp = Instant.now().getEpochSecond();

C#

// .NET Framework 4.6以降 / .NET Core
long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();

// 古いバージョン
var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;

Ruby

# 現在のタイムスタンプを取得
timestamp = Time.now.to_i

# 別の方法
timestamp = Time.new.to_i

Go

import "time"

// 現在のUnixタイムスタンプを取得
timestamp := time.Now().Unix()

// ミリ秒単位の場合
milliseconds := time.Now().UnixMilli()

データベースクエリ

MySQL

-- 現在のタイムスタンプを取得
SELECT UNIX_TIMESTAMP();

-- 特定の日付からタイムスタンプを取得
SELECT UNIX_TIMESTAMP('2025-10-12 14:30:00');

PostgreSQL

-- 現在のタイムスタンプを取得
SELECT EXTRACT(EPOCH FROM NOW());

-- 特定の日付から
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2025-10-12 14:30:00');

SQLite

-- 現在のタイムスタンプを取得
SELECT STRFTIME('%s', 'now');

-- 特定の日付から
SELECT STRFTIME('%s', '2025-10-12 14:30:00');

コマンドライン

Unix/Linux Shell

# 現在のタイムスタンプを取得
date +%s

# 特定の日付をタイムスタンプに変換
date +%s -d "2025-10-12 14:30:00"

# UTC/GMT時間の場合は、-dの代わりに-udを使用
date +%s -ud "2025-10-12 14:30:00"

PowerShell

# 現在のタイムスタンプを取得
[int][double]::Parse((Get-Date (Get-Date).ToUniversalTime() -UFormat %s))

エポックから人間が読める日付への変換

Unixタイムスタンプを取得したら、読みやすい日付フォーマットに変換する必要があることがよくあります:

JavaScript

// タイムスタンプをDateオブジェクトに変換
const date = new Date(timestamp * 1000); // ミリ秒単位にするために1000を掛ける

// フォーマットする
console.log(date.toLocaleString()); // ローカルフォーマット
console.log(date.toISOString());    // ISO 8601フォーマット

PHP

// タイムスタンプをフォーマット
$date = date('Y-m-d H:i:s', $timestamp);

// RFC 2822フォーマット
$date = date('r', $timestamp);

// DateTimeを使用
$date = (new DateTime())->setTimestamp($timestamp)->format('Y-m-d H:i:s');

Python

from datetime import datetime

# datetimeオブジェクトに変換
dt = datetime.fromtimestamp(timestamp)

# フォーマットする
formatted = dt.strftime('%Y-%m-%d %H:%M:%S')

# UTCの場合
dt_utc = datetime.utcfromtimestamp(timestamp)

MySQL

-- タイムスタンプをdatetimeに変換
SELECT FROM_UNIXTIME(1728773400);

-- カスタムフォーマットで
SELECT FROM_UNIXTIME(1728773400, '%Y-%m-%d %H:%i:%s');

人間が読める日付からエポックへの変換

逆の操作も同様に重要です:

JavaScript

// 日付文字列をタイムスタンプに解析
const timestamp = Math.floor(new Date('2025-10-12 14:30:00').getTime() / 1000);

// Date.parse()を使用
const timestamp = Math.floor(Date.parse('October 12, 2025') / 1000);

PHP

// ほとんどの英語の日付テキストを解析
$timestamp = strtotime('15 November 2025');
$timestamp = strtotime('next Monday');
$timestamp = strtotime('+1 week');

// DateTimeを使用
$timestamp = (new DateTime('2025-10-12 14:30:00'))->getTimestamp();

Python

from datetime import datetime
import time

# 日付文字列を解析
dt = datetime.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S')
timestamp = int(dt.timestamp())

# UTCの場合
import calendar
timestamp = calendar.timegm(time.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S'))

ベストプラクティス

アプリケーションでUnixタイムスタンプを扱う際には:

  • 常に64ビット整数を使用する – Y2038問題を回避するため
  • データベースにはUTCでタイムスタンプを保存する – 表示用にのみローカル時間に変換する
  • 精度を一貫させる – アプリケーション全体で秒単位かミリ秒単位かを統一する
  • フォーマットを文書化する – 秒単位かミリ秒単位かを明確にする
  • 複雑な日付/時刻操作にはタイムゾーン対応ライブラリを検討する
  • タイムゾーン情報なしでローカル時間をタイムスタンプとして保存しない

まとめ

Unixタイムスタンプは、すべての開発者が理解すべきプログラミングの基本的な概念です。これらは、すべてのシステムとプログラミング言語で機能する、時間を表現するためのシンプルで普遍的な方法を提供します。

Webアプリケーションを構築している場合でも、データベースを扱っている場合でも、タスクをスケジュールする必要がある場合でも、エポックタイムを理解することで作業がはるかに簡単になります。タイムスタンプと人間が読める日付をすばやく変換するには、Unixタイムスタンプコンバーターツールをご利用ください!

今すぐ試す: コンバーターツールにアクセスして、リアルタイムでUnixタイムスタンプを扱う練習をしましょう!