UNIX時間とは
UNIX時間(UNIXタイムスタンプ、POSIX時間とも呼ばれます)は、UNIXエポックである1970年1月1日0時0分0秒(UTC)からの経過秒数を表す数値です。ある瞬間を1つの整数で表現できる、言語や環境に依存しない普遍的な方式で、ログやデータベース、API、プログラミングなどコンピューターのあらゆる場面で利用されています。うるう秒は考慮されず、1日は必ず86,400秒として扱われます。
この計算機の使い方
まず、ふだん目にする時計の表示どおりに、日付(年・月・日)と時刻(時・分・秒)を入力します。次に「UTCとの時差」に、その地方時のタイムゾーンのずれを時間単位で指定します。たとえば日本は+9、インドは+5.5、米国の太平洋標準時(PST)は-8です。初期値は+9(日本時間)です。時・分・秒を空欄にした場合は0として計算されます。
計算式の解説
はじめに、Howard Hinnant氏による「days-from-civil」アルゴリズムを使って、日付をエポックからの日数に変換します。この方法なら、うるう年や1970年より前の日付も含め、あらゆるグレゴリオ暦の日付について正確に日数を数えられます。求めた日数に86,400を掛け、そこへ時・分・秒を足すと、地方時における1970年1月1日0時0分0秒からの経過秒数が得られます。最後にUTCとの時差(時間×3600)を差し引いて、結果をUTC基準に補正します。
$$\begin{gathered} t = 86400 \cdot D + 3600\,\text{Hour} + 60\,\text{Minute} + \text{Second} - 3600\,\text{UTC Offset} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} D &= \text{days from } 1970\text{-}01\text{-}01 \text{ to the chosen date} \\ \text{date} &= \left(\text{Year},\ \text{Month},\ \text{Day}\right) \end{aligned} \right. \end{gathered}$$
計算例
時差+9で2025年6月15日0時0分0秒の場合:エポックからの日数(daysSinceEpoch)は20254なので、地方時の秒数(localSeconds)は\(20254\times86400 = 1{,}749{,}945{,}600\)となります。ここから\(9\times3600 = 32{,}400\)を差し引くと、UNIX時間は1,749,913,200。これは2025年6月14日15時0分0秒(UTC)に相当します。
$$1749913200 = 20254 \times 86400 - 9 \times 3600$$よくある質問
プラスの時差なのに、想定より小さい値になるのはなぜ? UTCより進んでいる地方時は、UTCで見るとより早い瞬間に対応します。そのため、同じ時計表示をUTCとして読んだ場合よりもUNIX値は小さくなります。
1970年より前の日付も計算できますか? はい。その場合は単純に負の値になります。たとえば1969年12月31日23時59分59秒(UTC)は\(-1\)です。
うるう秒は含まれますか? いいえ。1日を必ず86,400秒とする標準的なPOSIXの定義に従っています。