本文へスキップ

UNIXタイムスタンプ変換ツール

UNIXタイムスタンプを日時に、日時をタイムスタンプに変換します。秒・ミリ秒・マイクロ秒・ナノ秒を自動判定し、タイムゾーン別のISO 8601と現在のUNIX時間を表示します。

現在のUNIX時間

  • 秒 (s)
  • ミリ秒 (ms)

自動は桁数で判定します(10桁は秒、13桁はミリ秒)。

結果

タイムスタンプを入力すると日時に変換します。

例: 1700000000 → 2023年11月14日 22:13:20 UTC

入力した内容はこのブラウザの中だけで処理され、サーバーには送信されません。 仕組みを見る

UNIXタイムスタンプ1704067200秒を2024年1月1日0時UTCに変換

使い方

いちばん上には現在のUNIX時間が秒とミリ秒で表示され、1秒ごとに更新されます。横のコピーボタンですぐにコピーできます。

タイムスタンプ → 日時 タブで数値を貼り付けると、選んだタイムゾーンでの日付・曜日・時刻と、今からどのくらい前(後)かが表示されます。その下には判定した単位と秒・ミリ秒の値が表示され、続いてISO 8601(UTCと選んだタイムゾーン)とHTTP日付(RFC 9110)の形式がコピーボタン付きで並びます。選んだタイムゾーンがこの端末のタイムゾーンと違う場合は、この端末の時刻もあわせて表示します。HTTP日付が出るのは年が0〜9999のときだけです。タイムゾーンの一覧にはブラウザが知っているIANAタイムゾーン(Asia/Tokyo、Europe/Berlin など)がすべてあり、最初はこの端末のタイムゾーンが選ばれています。現在時刻とタイムゾーンは、この端末の時計とブラウザの設定から読み取ります。

日時 → タイムスタンプ タブでは、日付と時刻(秒まで)を入力し、その時刻がどのタイムゾーンのものかを選ぶと、秒とミリ秒のタイムスタンプを返します。

UNIX時間とは

UNIX時間(エポック秒、POSIX時間)は、1970-01-01T00:00:00Z(UTC)から経過した秒数です。POSIX規格はこれを「Seconds Since the Epoch」と定義し、1日を常に86,400秒として数えます。そのためうるう秒は数えません。うるう秒が入った日もUNIX時間では86,400秒で、日付の計算が単純になる代わりに、実際の経過秒数とはうるう秒の分だけずれます。このツールでも、うるう秒の時刻(23:59:60)は出てきません。タイムスタンプを日時に変換すると秒は必ず0〜59になり、日時 → タイムスタンプ タブにも60秒は入力できません。

タイムスタンプはある瞬間を指す数なので、タイムゾーンに関係なく同じです。東京でもニューヨークでも同じ瞬間のタイムスタンプは同じで、時計の時刻に直すときにだけタイムゾーンが必要になります。タイムスタンプ → 日時 タブでタイムゾーンを切り替えると、変わるのは日時とそのタイムゾーンのISO 8601の行だけで、秒・ミリ秒の値、ISO 8601 (UTC)、HTTP日付はそのままです。逆に 日時 → タイムスタンプ タブでは、同じ日付と時刻でも、UTCとの時差が違うタイムゾーンに切り替えるとタイムスタンプが変わります。

秒・ミリ秒・マイクロ秒・ナノ秒の見分け方

同じ瞬間でも単位によって桁数が変わります。2020年代の時刻なら、ふつうは次のとおりです。

  • 秒: 10桁(1700000000)— Pythonの int(time.time())、PostgreSQL・MySQLの関数
  • ミリ秒: 13桁(1700000000000)— JavaScriptの Date.now()
  • マイクロ秒: 16桁 — 一部のデータベースやログ
  • ナノ秒: 19桁 — 高精度の時計を使う言語やログ

このツールの自動判定は、先頭の0を除いた整数部の桁数で決めます。11桁以下は秒、12〜14桁はミリ秒、15〜17桁はマイクロ秒、18桁以上はナノ秒です。1973年3月より前の時刻をミリ秒で書いた値のように桁数が少ない場合は、単位を手動で選んでください。ミリ秒未満の桁(マイクロ秒・ナノ秒の値や、小数で書いた桁)は、日時の表示では切り捨てます。

JavaScriptの Date が扱える範囲は、1970年を基準に前後8.64 × 10¹⁵ミリ秒(1億日、約27万年)です。つまり -271821-04-20T00:00:00Z から +275760-09-13T00:00:00Z までで、この範囲外の値は範囲エラーとして知らせます。

言語別に現在のタイムスタンプを取得する

// JavaScript: 秒(Date.now() はミリ秒)
Math.floor(Date.now() / 1000)
# Python: 秒(time.time() は小数付きの秒)
import time; int(time.time())
-- PostgreSQL
SELECT EXTRACT(EPOCH FROM now());
-- MySQL
SELECT UNIX_TIMESTAMP();

タイムゾーンと夏時間

夏時間のあるタイムゾーンで日時をタイムスタンプに変換するときは、2つの例外があります。夏時間が始まる日は時計が進むため存在しない時刻があり(例: ニューヨークの2026-03-08 02:30)、終わる日は同じ時刻が2回あります(例: ニューヨークの2026-11-01 01:30)。このツールは、存在しない時刻は切り替え前の時差で計算し、切り替わった分だけ後ろにずれた時刻として扱います。2回ある時刻は先のほうを選びます。どちらの場合も、結果の上に案内を表示します。

参考資料

よくある質問

カンマ入りの数値や1.7e9のような値を貼り付けると、なぜエラーになるのですか?

タイムスタンプの入力欄が読み取るのは、数字と先頭の符号(+ または -)、小数点1つだけだからです。1,700,000,000のようにカンマや空白で桁を区切った値、1.7e9のような指数表記、0xで始まる16進数、1700000000sのように文字が付いた値、小数点をカンマで書いた1700000000,5は、どれも「数字だけを入力してください」というエラーになります。区切り記号や文字を消して、1700000000のように数字だけにしてください。小数点の前後には数字が必要なので、.5は0.5と書きます。値の前後の空白は無視するので消さなくてもかまいません。0001700000000のように先頭に0が付いた値もそのまま読み取ります。

1970年や数万年先の日付が出る場合は何を確認しますか?

単位を取り違えると日時が大きくずれます。単位を「ミリ秒 (ms)」にして1700000000を入力すると1970-01-20T16:13:20Zになり、「秒 (s)」にして1700000000000を入力すると+055840-11-08T22:13:20Zになります。結果が1970年1月や数万年先になったときは、単位を「自動」に戻すか、値に合った単位を選んでください。1700000000.5のように小数が付いた値は、小数点より前の桁数だけを数えて秒と判定し、ミリ秒の値は1700000000500になります。

負のタイムスタンプも使えますか?

使えます。数値の前に-を付けて入力すると、1970-01-01T00:00:00Zより前の時刻に変換します。-86400は1日前の1969-12-31T00:00:00Zです。自動判定は符号を除いた桁数だけを数えるので、-1700000000000はミリ秒として読み、1916-02-18T01:46:40Zになります。小数が付いた負の値では、秒の値を0に近いほうではなく、より前の時刻のほうへ切り下げます。-0.5を入力すると、ミリ秒は-500、秒は-1になります。日時 → タイムスタンプ タブでも、1970年より前の日時を入力すると負の値になります。タイムゾーンをUTCにして1969-12-31 00:00:00を入力すると-86400です。

日時の下に出る「3 年前」のような表示が、実際の日付の差と合わないように見えます。どう計算していますか?

この表示はカレンダーで数えたものではなく、現在との差を決まった長さで割った概算です。差が1分未満なら秒、1時間未満なら分、24時間未満なら時間、30日未満なら日で表します。365日未満は30日を1か月として、それ以上は365日を1年として計算し、余りは切り捨てます。そのため、364日前は「12 か月前」、4 × 365日に1日足りない1459日前は「3 年前」と表示されます。正確な日付は、その上の日時やISO 8601の行で確認してください。

1900年のような昔の日付で、時差が+08:27:52のように秒まで表示されます。不具合ですか?

不具合ではありません。このツールは時差を独自に決めず、ブラウザのタイムゾーンデータがその時刻について返す値を、丸めずにそのまま使います。そのデータには、昔の時期の時差が時・分で割り切れないタイムゾーンがあります。たとえばタイムゾーンをAsia/Seoulにして-2208988800(1900-01-01T00:00:00Z)を入力すると、ISO 8601 (Asia/Seoul) の行の時差は+08:27:52になります。日時 → タイムスタンプ タブも同じ時差で計算するので、Asia/Seoulの1900-01-01 00:00:00は-2209019272になります(UTCにすると-2208988800)。ブラウザに入っているタイムゾーンデータによって結果が変わることがあります。

2038年以降の日付も変換できますか?

UNIX時間を符号付き32ビット整数(time_t が32ビットのシステム)に入れると、最大値は2147483647です。これは2038-01-19T03:14:07Zで、その1秒後には値があふれて-2147483648、つまり1901-12-13T20:45:52Zに戻ります。64ビットの time_t を使う最近のOSは問題ありませんが、タイムスタンプを32ビット整数の列やファイルのフィールドに保存するプログラムや、古い組み込み機器はいまも影響を受けます。このツールは32ビット整数を使わないので、この範囲の外の値もそのまま変換します。タイムスタンプ → 日時 タブでは、秒に換算した値がこの範囲(-2147483648〜2147483647)を外れると、結果の下でお知らせします。日時 → タイムスタンプ タブにはこのお知らせがないので、結果がこの範囲に収まっているかは自分で確認してください。

最終更新日: