Unix時間(タイムスタンプ)とは

Unix時間(Unix time / Epoch time)は、協定世界時(UTC)の 1970年1月1日 00:00:00 からの経過秒数で時刻を表す方式です。プログラミングの世界では時刻を整数1つで扱えるため、ほぼすべての言語・データベースで標準的に使われています。

主な特徴

  • タイムゾーンに依存しない(必ずUTC基準)
  • 整数1つで完結(ソート・差分計算が容易)
  • 実装ごとの差異が少ない(互換性が高い)
  • 人間には読みにくい(変換が必要)

秒・ミリ秒・マイクロ秒の違い

実装言語・APIによって精度が異なります。

単位桁数(2026年時点)主な使用言語・環境
10桁(17xxxxxxxx)Unix系コマンド・PHP time()・Pythonの time.time() の整数部
ミリ秒13桁(17xxxxxxxxxxx)JavaScript Date.now()・Java・Kotlin
マイクロ秒16桁Python datetime.timestamp()(小数部)・C++
ナノ秒19桁Go・Rust・高精度ロギング
2026-04-29 00:00:00 UTC
= 秒        : 1777593600
= ミリ秒     : 1777593600000
= マイクロ秒  : 1777593600000000
= ナノ秒     : 1777593600000000000

「13桁の数字が来たらミリ秒、10桁なら秒」と覚えておけば誤判定を減らせます。

言語別の変換方法

JavaScript / TypeScript

// 現在のUnix時間(ミリ秒)
const ms = Date.now();
const sec = Math.floor(Date.now() / 1000);

// Unix時間 → Date
const date = new Date(1777593600 * 1000);  // 秒の場合は1000倍
const date2 = new Date(1777593600000);     // ミリ秒の場合はそのまま

// Date → Unix時間
const unix = date.getTime();          // ミリ秒
const unixSec = Math.floor(unix / 1000);  // 秒

// ISO形式
console.log(date.toISOString());  // "2026-04-29T00:00:00.000Z"

Python

import time
from datetime import datetime, timezone

# 現在のUnix時間
now_sec = time.time()              # 秒(小数)
now_int = int(time.time())         # 秒(整数)
now_ms = int(time.time() * 1000)   # ミリ秒

# Unix時間 → datetime
dt = datetime.fromtimestamp(1777593600, tz=timezone.utc)
dt_jst = datetime.fromtimestamp(1777593600)  # ローカルタイム

# datetime → Unix時間
unix = int(datetime.now(tz=timezone.utc).timestamp())

PHP

// 現在のUnix時間
$now = time();             // 秒
$now_ms = microtime(true); // 秒(小数)

// Unix時間 → 日付
$date = date('Y-m-d H:i:s', 1777593600);

// 日付 → Unix時間
$unix = strtotime('2026-04-29 00:00:00');
$unix_jst = strtotime('2026-04-29 09:00:00 Asia/Tokyo');

Go

import "time"

// 現在のUnix時間
now := time.Now().Unix()           // 秒
nowMs := time.Now().UnixMilli()    // ミリ秒
nowNs := time.Now().UnixNano()     // ナノ秒

// Unix時間 → time.Time
t := time.Unix(1777593600, 0)

// time.Time → Unix時間
unix := t.Unix()

Rust

use std::time::{SystemTime, UNIX_EPOCH};

let now = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_secs();

Bash / シェル

# 現在のUnix時間
date +%s

# Unix時間 → 日付(GNU date)
date -d @1777593600 '+%Y-%m-%d %H:%M:%S'

# Unix時間 → 日付(macOS / BSD date)
date -r 1777593600 '+%Y-%m-%d %H:%M:%S'

# 日付 → Unix時間
date -d '2026-04-29 00:00:00 UTC' +%s

Excel / Googleスプレッドシートでの変換

Excelの日付は「1900年1月1日からの日数」、Unix時間は「1970年1月1日からの秒数」なので、差分(25569日)と86400秒/日を考慮します。

# Unix時間(秒) → Excel日付(UTC)
=A1/86400+25569

# Unix時間(秒) → Excel日付(JST = UTC+9)
=A1/86400+25569+9/24

# Excel日付 → Unix時間(秒, UTC)
=(A1-25569)*86400

# Excel日付 → Unix時間(秒, JST入力をUTCに換算)
=(A1-25569-9/24)*86400

セル書式を「日付」に設定してください。

SQLでの扱い

MySQL

-- 現在のUnix時間
SELECT UNIX_TIMESTAMP();

-- Unix時間 → 日付
SELECT FROM_UNIXTIME(1777593600);

-- 日付 → Unix時間
SELECT UNIX_TIMESTAMP('2026-04-29 00:00:00');

PostgreSQL

-- 現在のUnix時間
SELECT EXTRACT(EPOCH FROM NOW())::bigint;

-- Unix時間 → 日付
SELECT TO_TIMESTAMP(1777593600);

-- 日付 → Unix時間
SELECT EXTRACT(EPOCH FROM '2026-04-29 00:00:00'::timestamp);

SQLite

-- 現在のUnix時間
SELECT strftime('%s', 'now');

-- Unix時間 → 日付
SELECT datetime(1777593600, 'unixepoch');

タイムゾーンの罠

Unix時間は必ずUTC基準ですが、表示時にタイムゾーンを意識しないと9時間ズレます。

言語UTC固定の関数ローカルタイム関数
JavaScriptDate.UTC()new Date()
Pythondatetime.now(timezone.utc)datetime.now()
PHPgmdate()date()
Gotime.UTCtime.Local
MySQLUTC_TIMESTAMP()NOW()

サーバー間でタイムスタンプをやり取りする際は、JSON や DB に保存するときはUTC・表示時にローカルへ変換するのが鉄則です。

2038年問題

Unix時間を32ビット符号付き整数で扱うシステムは、2038年1月19日 03:14:07 UTCにオーバーフローします。

影響を受けるシステム影響
C言語の time_t(32ビット)負の値になり過去日扱い
古い組込み機器動作不定
古いMySQL TIMESTAMP型1970-2038のみ対応
32ビットLinuxの一部既に64bit化進行中

現代のシステムはほぼ64ビット化済みですが、組込み・レガシーシステムは要注意です。

よく使うUnix時間(参考)

日時(UTC)Unix時間(秒)
1970-01-01 00:00:000
2000-01-01 00:00:00946684800
2010-01-01 00:00:001262304000
2020-01-01 00:00:001577836800
2025-01-01 00:00:001735689600
2030-01-01 00:00:001893456000
2038-01-19 03:14:072147483647(32bit max)

デバッグ・調査時のテクニック

ログにUnix時間しか出ていない場合

すぐに変換できるよう、以下のワンライナーをエイリアス登録しておくと便利:

# ~/.bashrc または ~/.zshrc
alias ts='date +%s'
ts2date() { date -d "@$1" '+%Y-%m-%d %H:%M:%S %Z'; }
$ ts
1777593600

$ ts2date 1777593600
2026-04-29 09:00:00 JST

日付フォーマットを確認したいとき

ハカドルツールズのUnix時間変換ツールはブラウザで瞬時に変換できます。秒・ミリ秒どちらも対応し、UTC/JSTを切り替え表示できるためデバッグ用途に最適です。

まとめ

  • Unix時間はUTCベースで世界共通の時刻表現
  • 桁数で秒/ミリ秒を判別(10桁=秒、13桁=ミリ秒)
  • 言語ごとのAPIを使えば変換は1〜2行
  • 2038年問題は組込み・レガシーで要対策

関連ツール: Unix時間変換ツール では秒/ミリ秒のタイムスタンプと日付を相互変換できます。タイムゾーンを跨ぐ調査にはタイムゾーン変換ツールもあわせてご利用ください。