1601 kicks off a 400-year cycle
Windows chose 1601-01-01 because Gregorian leap years repeat every 400 years. Starting at a cycle boundary keeps the math neat.
Also known as LDAP time, Active Directory timestamp, Windows NT time, Win32 FILETIME, SYSTEMTIME, and NTFS file time.
0 or 9223372036854775807 (0x7FFFFFFFFFFFFFFF)v1.1 (May 17, 2026)
1.3332384e17.0x7F are converted normally.
Windows FILETIME (often called LDAP time, NT time, or NTTIME) is a 64-bit signed
integer used by Windows and Active Directory to represent absolute moments in time. The value counts the
number of 100-nanosecond intervals (a.k.a. “ticks”) that have elapsed since the
Windows epoch: 1601-01-01T00:00:00Z (UTC). Many directory attributes use this format,
including lastLogonTimestamp, pwdLastSet, accountExpires, badPasswordTime,
and more.
FILETIME provides a compact, monotonic, time zone–agnostic representation with sub-second precision (100 ns). Because the value is UTC-based, it avoids daylight saving time pitfalls and regional formatting inconsistencies. In LDAP/AD, these values are stored as 64-bit integers and can be transported or indexed efficiently across systems.
Compared to the UNIX epoch (1970-01-01T00:00:00Z), the Windows epoch starts earlier. The exact gap is
11,644,473,600,000 milliseconds (that is, 11644473600 seconds). Conversion is therefore a simple
offset plus a unit change:
ms = (filetime / 10,000) − 11,644,473,600,000filetime = (ms + 11,644,473,600,000) × 10,000
Our converter performs this arithmetic safely with BigInt, then renders human-readable results in UTC
and your chosen time zone. Because the underlying value is UTC, DST never alters the stored number—only
the display string changes.
Some AD attributes use sentinel values to mean no expiry or not set. The most common are:
0 — often interpreted as Never (e.g., accountExpires).9,223,372,036,854,775,807 (0x7FFFFFFFFFFFFFFF) — the maximum 64-bit signed integer, also used to indicate Never.The tool detects and labels these values automatically so you don’t mistake them for real dates.
FILETIME values are frequently shown as 18-digit decimals in LDAP tools and logs. Some APIs and
forensic utilities present the same value in hexadecimal (with or without a 0x prefix).
Both point to the same 64-bit number, and this page accepts either form. Internally, Windows APIs expose
FILETIME as two 32-bit parts; when serialized in binary structures they are little-endian, but LDAP/AD
queries typically surface them as regular big-number integers—no byte-swapping is needed when you paste a
string here.
JavaScript’s Number type cannot precisely represent all 64-bit integers. To avoid rounding, this
converter uses BigInt for the math and only converts to Date once the value is safely
in milliseconds, preserving accuracy for very large timestamps.
Date (≈ ±8.6e15 ms). The tool warns if a value is out of range.lastLogon vs lastLogonTimestamp, remember replication behavior; the precise tick still converts the same way.
Tip: Need a quick mental check? Divide the FILETIME by 10,000 to get milliseconds since 1601,
subtract 11,644,473,600,000, and compare the result to today’s epoch milliseconds.
Or just paste it above and let the converter handle the details—privately, in your browser.
Microsoft documents Active Directory date/time values such as LastLogon,
LastLogonTimestamp, and LastPwdSet as large integers that convert from
100-nanosecond intervals since 1601-01-01 UTC
(Microsoft Learn).
lastLogon: The last logon time recorded by a specific domain controller. Query all DCs for the most accurate result.lastLogonTimestamp: A replicated logon timestamp used for stale-account discovery; it may lag behind real activity.pwdLastSet: The time the account password was last set. A value of 0 can force a password change.accountExpires: Account expiration time. 0 and 0x7FFFFFFFFFFFFFFF commonly mean Never.badPasswordTime: The latest bad password attempt time recorded for the account.lastLogoff: Legacy logoff field. In many environments it is unused or left at 0.lockoutTime: Time when the account was locked out; 0 means it is not currently locked.whenCreated: Object creation time. This is often exposed as LDAP GeneralizedTime rather than Integer8 FILETIME.To convert a FILETIME value to UTC:
[DateTime]::FromFileTimeUtc(133323840000000000)
To convert a UTC date back to FILETIME:
(Get-Date "2025-03-01T10:30:00Z").ToFileTimeUtc()
If the FILETIME value is in A1, use:
=(A1/864000000000)-109205
Then format the result cell as Date/Time. The divisor converts 100-ns ticks to days, and 109205 adjusts Excel’s date system to the Windows FILETIME epoch.
LDAP and Active Directory tools can show more than one timestamp format. An 18-digit integer is usually Windows FILETIME / Integer8, while a compact year-month-day string is usually LDAP GeneralizedTime.
133323840000000000 = Windows FILETIME / Integer820260517115858Z = LDAP GeneralizedTimeWindows chose 1601-01-01 because Gregorian leap years repeat every 400 years. Starting at a cycle boundary keeps the math neat.
FILETIME counts 100-ns ticks—the same tick size .NET uses—so there are ten million ticks per second and 864 billion in a day.
Subtract hex 0x01B21DD213814000 (116444736000000000 decimal) from a FILETIME to land exactly on the Unix epoch.
The AD sentinel 0x7FFFFFFFFFFFFFFF points to a date around the year 30,828—far enough away to stand in for infinity.
FILETIME travels as two little-endian 32-bit parts in Windows structs, but LDAP surfaces it as one big integer—no byte swap needed when you paste values here.
FILETIME uses a different epoch (1601-01-01 UTC) and unit (100 ns). The tool converts via precise arithmetic with
BigInt and an exact epoch offset so it’s safe for large values.
No. LDAP/FILETIME values encode an absolute moment in UTC. Only the display in your selected time zone changes with DST.
Yes. Click the copy chips beside each output to copy decimal, hexadecimal, and ISO-8601 UTC.