The Windows NT Epoch: Why 1601?
Published: April 5, 2026 | Category: Digital Timekeeping
While the Unix world famously starts counting time from 1970, Microsoft's Windows NT operating system, and the file systems derived from it (like NTFS), track time starting from a much older date: January 1, 1601.
The FILETIME Structure
In the Windows API, system time is often represented by a FILETIME structure. This structure contains a 64-bit value representing the number of 100-nanosecond intervals that have elapsed since 12:00 A.M. (midnight), January 1, 1601, Coordinated Universal Time (UTC).
Why 1601? The Gregorian Connection
The choice of 1601 seems bizarre at first glance, but it is deeply practical and linked to the Gregorian Calendar. The Gregorian calendar operates on a 400-year cycle (which determines leap years). 1601 was the first year of the 400-year cycle that was active when Windows NT was being developed (the cycle running from 1601 to 2000).
By starting the epoch at the beginning of a 400-year calendar cycle, Microsoft engineers vastly simplified the mathematics required to convert between system time and human-readable dates. It made calculations for leap years elegant and fast.
Scale and Precision
A major difference between standard Unix time and Windows NT time is the precision. While Unix time originally dealt in seconds, Windows FILETIME ticks every 100 nanoseconds. This 64-bit integer allows Windows to track time with incredible precision for over 58,000 years before overflowing.
Interoperability Challenges
Because Windows and Unix start counting from different zero-points, software developers frequently have to convert between the two. The difference between January 1, 1601, and January 1, 1970, is exactly 11,644,473,600 seconds. Converting a Unix timestamp to a Windows FILETIME involves multiplying the Unix timestamp by 10,000,000 (to reach 100-nanosecond resolution) and adding that massive 11.6 billion second offset.