Mac Absolute Time

Mac Absolute Time → Unix タイムスタンプ コンバーター

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

2001-01-01 UTC からの秒数

現在の時刻 — Mac 絶対時間 (CFAbsoluteTime)
Unix タイムスタンプ(秒)

Mac Absolute Time とは?

Apple の Core Foundation は時間を CFAbsoluteTime として測ります。これは基準日 2001 年 1 月 1 日 00:00:00 UTC からの秒数の倍精度カウントです。この「Mac absolute time」は macOS と iOS の至る所、plist ファイル、統合ロギングシステム、多くの Cocoa API に現れます。

  • エポック:2001-01-01 00:00:00 UTC(Cocoa/Core Foundation の基準日)
  • 型:浮動小数点の秒。したがって小数部は秒未満の精度を持つ
  • 現在の値はおよそ 7.4 × 10^8(同等の Unix タイムスタンプより小さい)
  • 見られる場所:CFAbsoluteTimeGetCurrent()、NSDate timeIntervalSinceReferenceDate、plist の Date 値

Mac Absolute Time を Unix 時間に変換する方法

Unix エポック(1970)と Apple エポック(2001)の間には 978,307,200 秒あります。このオフセットを足して Apple 秒を Unix 秒に変換します。

  • Unix seconds = MacAbsoluteTime + 978307200
  • 例:721692800 → 1700000000 → 2023-11-14 22:13:20 UTC
  • 逆方向:MacAbsoluteTime = Unix seconds − 978307200
  • Swift: Date(timeIntervalSinceReferenceDate: t).timeIntervalSince1970

関連する Apple 形式

Core Data は日付を同じ CFAbsoluteTime 値として永続化するため、Core Data タイムスタンプコンバーターは同じ計算を使います。Unix タイムスタンプに見える値には注意してください — 2001 年基準の値はオフセットを忘れると約 31 年早く表示されます。

  • Core Data SQLite は ZDATE 列を 2001 年からの秒として保存する
  • 7×10^8 付近の裸の値は、ほぼ確実に Unix 時間ではなく Apple 時間
  • 一部の APNs やログの値も同じ基準日を使う

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

その他の Apple プラットフォームの時間型

CFAbsoluteTime は Apple の標準的な基準ですが、関連する型が Apple のフレームワーク全体に現れます:

  • NSDate は同じ基礎の timeIntervalSinceReferenceDate を持つ(2001 年からの秒)
  • NSTimeInterval は倍精度の秒値の typedef(常に Apple エポックとは限らない — 文脈依存)
  • plist の <date> 要素は生の CFAbsoluteTime ではなく ISO 8601 文字列として書かれる — 永続化の前に変換する
  • iOS の統合ロギングのタイムスタンプや Core Telephony のイベントは一般に CFAbsoluteTime を使う
  • macOS の log show 出力は既定でローカル時刻を表示する。生のイベントタイムスタンプは UTC のまま

FAQ

CFAbsoluteTime のエポックとは?
CFAbsoluteTime は 2001 年 1 月 1 日 00:00:00 UTC からの秒を数えます。これは Core Foundation/Cocoa の基準日です。
Mac の絶対時刻を Unix 時間に変換するには?
Mac の絶対時刻に 978,307,200 秒を足して、秒単位の Unix タイムスタンプを得ます。
Mac の絶対時刻は Core Data のタイムスタンプと同じか?
はい。Core Data は日付を CFAbsoluteTime(2001 年からの秒)として保存するため、変換は同一です。