Windows FILETIME to Unix Timestamp Converter
Paste a Windows FILETIME value and convert it to a Unix timestamp (seconds and milliseconds), ISO 8601, and a human-readable date in any timezone. FILETIME counts 100-nanosecond intervals since January 1, 1601 UTC.
What is a Windows FILETIME?
FILETIME is the timestamp format used throughout the Windows API. It is a 64-bit value counting the number of 100-nanosecond intervals (ten-millionths of a second) that have elapsed since 00:00:00 on January 1, 1601 UTC — the start of the Gregorian calendar cycle Windows uses internally.
- Epoch: 1601-01-01 00:00:00 UTC
- Resolution: 100-nanosecond ticks (10,000,000 per second)
- Width: 64-bit unsigned integer, often stored as two 32-bit DWORDs (dwLowDateTime, dwHighDateTime)
- Seen in: NTFS file times, the Windows registry, Active Directory (e.g. lastLogonTimestamp, pwdLastSet), and event logs
How to convert FILETIME to a Unix timestamp
There are 11,644,473,600 seconds between the FILETIME epoch (1601) and the Unix epoch (1970). Divide the FILETIME by 10,000,000 to get seconds, then subtract that offset.
- Unix seconds = FILETIME / 10000000 − 11644473600
- Unix milliseconds = FILETIME / 10000 − 11644473600000
- Example: 133444736000000000 → 1700000000 seconds → 2023-11-14 22:13:20 UTC
- Reverse: FILETIME = (Unix milliseconds + 11644473600000) × 10000
Precision and edge cases
A FILETIME for a present-day moment is roughly 1.3 × 10^17, which exceeds the safe integer range of a JavaScript number (2^53). This converter parses the value with BigInt so no precision is lost. Sub-millisecond precision (the last four digits) is dropped when converting to a millisecond Unix timestamp.
- Active Directory sometimes stores 0 or 9223372036854775807 to mean "never" — these are sentinels, not real dates
- FILETIME is always UTC; apply a timezone only when displaying the result
- Local-time variants (from FileTimeToLocalFileTime) already include the offset — convert those back to UTC first
- What is the FILETIME epoch?
- FILETIME counts 100-nanosecond intervals since January 1, 1601 00:00:00 UTC, the base date Windows uses for the Gregorian calendar.
- Why subtract 11644473600 seconds?
- That is the number of seconds between the 1601 FILETIME epoch and the 1970 Unix epoch. Dividing FILETIME by 10,000,000 gives seconds since 1601; subtracting the offset rebases it to 1970.
- How do I convert a FILETIME stored as two 32-bit values?
- Combine them as FILETIME = (dwHighDateTime × 4294967296) + dwLowDateTime, then convert that 64-bit value as usual.