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 年からの秒)として保存するため、変換は同一です。