Excel Date Converter

Excel OADate → Unix タイムスタンプ コンバーター

Excel OADate を Unix 時間に変換します。正確な式と大きな値への対応。出力は秒、ミリ秒、ISO 8601、可読形式。

1899-12-30 からの日数

現在の時刻 — Excel シリアル値 / OADate
Unix タイムスタンプ(秒)

Excel のシリアル値(日付)とは?

Excel は日付をシリアル値として保存します。整数部はシステムのエポックからの日数、小数部はその日の時刻です。既定の 1900 日付システムでは、シリアル値 1 が 1900 年 1 月 1 日です。.NET と COM が使う OLE Automation Date(OADate)は同じ日数の数え方ですが、1899 年 12 月 30 日から数えます。

  • 日 0(OADate)= 1899-12-30;Excel シリアル値 1 = 1900-01-01
  • 整数部 = 日数、小数部 = 24 時間の一日に対する割合
  • 例:45244.92592593 → 2023-11-14 22:13:20
  • OADate は .NET の DateTime.ToOADate() で生成される

Excel の日付を Unix 時間に変換する方法

Excel/OADate の起点(1899-12-30)と Unix エポック(1970-01-01)の間には 25,569 日あります。それを引き、1 日の秒数を掛けます。

  • Unix seconds = (ExcelSerial − 25569) × 86400
  • Unix milliseconds = (ExcelSerial − 25569) × 86400000
  • 逆方向:ExcelSerial = Unix seconds / 86400 + 25569
  • このコンバーターは入力を UTC の壁掛け時計値として扱う

1900 年うるう年バグ

Lotus 1-2-3 との後方互換のため、Excel は 1900 年を誤ってうるう年として扱い、存在しない 1900 年 2 月 29 日(シリアル値 60)を含みます。1900 年 3 月 1 日以降のどの日付でも標準のオフセット 25,569 は正しく、影響を受けるのはシリアル値 60 以下だけです。実際のデータの大半はこれよりずっと後なので、実務でこのバグが問題になることはまれです — しかしこれが、オフセットが 25,568 ではなく 25,569 である理由です。

  • シリアル値 60 = 幻の 1900-02-29;シリアル値 61 = 1900-03-01
  • 1900-03-01 より前の日付は 1900 システムで 1 日ずれる
  • 1904 日付システム(古い Mac Excel)は代わりに 1904-01-01 から数える

関連するタイムスタンプ形式コンバーター

その他の表計算の日付システム

Excel の 1900 システムが最も一般的ですが、唯一ではありません:

  • Excel 1904 日付システム(古い Mac の既定)は 1904-01-01 を日 0 とする;Unix へのオフセットは 24107
  • Google スプレッドシートは互換性のため 1900 システム(オフセット 25569)に合わせる
  • LibreOffice Calc は設定により 1899-12-30 と 1900-01-01 の両方の起点に対応する
  • Power Query:Number.From(DateTime.FromText(...)) は 1899-12-30 からの日数を返す(1900 システム)
  • Excel の .xlsx の内部では、基礎となる XML が ISO 8601 を保存する — Excel は読み込み時にシリアル値へ/から変換する

FAQ

Excel のシリアル日付を Unix タイムスタンプに変換するには?
25,569(1899-12-30 と 1970-01-01 の間の日数)を引き、86,400 を掛けて Unix 秒を得ます。
OADate とは?
OLE オートメーション日付は 1899 年 12 月 30 日からの浮動小数点の日数で、.NET(DateTime.ToOADate)と COM が使います。すべての現代の日付で Excel のシリアル日付と一致します。
なぜ Excel のオフセットは 25568 ではなく 25569 なのか?
Excel の 1900 年うるう年バグが架空の 1900 年 2 月 29 日を挿入し、それ以降のすべての日付に 1 日加わるため、25,569 が現代の日付に対する正しいオフセットになります。