A Core Data timestamp value is a count of seconds from 2001-01-01T00:00:00Z. It is useful only when its source epoch and unit travel with it; the number by itself does not announce which clock it belongs to.
Conversion rule
Unix seconds = Core Data seconds + 978307200
The converter applies that relationship and returns Unix seconds, epoch milliseconds, ISO 8601 UTC, and a readable UTC value. Keep the original value as well when investigating a log or export so the conversion can be checked later.
Where mistakes happen
Core Data uses the same Apple reference date as CFAbsoluteTime. It does not become Unix seconds until you apply the epoch offset.
A safer workflow
- Identify the platform and field name before doing arithmetic.
- Preserve the original value as a string when it may exceed JavaScript safe-integer precision.
- Convert once at the boundary, then store or compare a declared Unix unit.
- Format in a named timezone only when presenting the resulting instant to a person.
Related format converters
Frequent questions:
- Q: What epoch does Core Data use?
- A: Core Data stores dates as seconds since January 1, 2001 00:00:00 UTC, the same reference date as CFAbsoluteTime/NSDate.
- Q: How do I convert a Core Data ZDATE to a real date?
- A: Add 978,307,200 to the value to get a Unix timestamp, then format it — for example, SQLite datetime(ZDATE + 978307200, "unixepoch").
- Q: Why are my Core Data dates 31 years off?
- A: You likely treated the 2001-based value as a Unix timestamp. Add the 978,307,200-second offset to correct it.