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固定の関数 | ローカルタイム関数 |
|---|---|---|
| JavaScript | Date.UTC() | new Date() |
| Python | datetime.now(timezone.utc) | datetime.now() |
| PHP | gmdate() | date() |
| Go | time.UTC | time.Local |
| MySQL | UTC_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:00 | 0 |
| 2000-01-01 00:00:00 | 946684800 |
| 2010-01-01 00:00:00 | 1262304000 |
| 2020-01-01 00:00:00 | 1577836800 |
| 2025-01-01 00:00:00 | 1735689600 |
| 2030-01-01 00:00:00 | 1893456000 |
| 2038-01-19 03:14:07 | 2147483647(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時間変換ツール では秒/ミリ秒のタイムスタンプと日付を相互変換できます。タイムゾーンを跨ぐ調査にはタイムゾーン変換ツールもあわせてご利用ください。