[How To Convert a UNIX time_t to a Win32 FILETIME or SYSTEMTIME][kb]:
> Under Win32 platforms, file times are maintained primarily in the form of
> a 64-bit FILETIME structure, which represents the number of 100-nanosecond
> intervals since January 1, 1601 UTC (coordinate universal time).
***UPDATED* New version with fixes by Tim Williams for preserving microseconds. See [here for details][updated].**
It just so happens that [Microsoft Active Directory][msad] uses the same 64-bit value to store some time values. For example [the `accountExpires` attribute][expires] is in this format. Linked below is a module for Python with utility functions for converting between [Python’s datetime instances][datetime] and Microsoft’s FILETIME values.
Very handy if you enjoy querying Active Directory for login accounts that are due to expire. And who wouldn’t enjoy that? On a Monday.
[Download filetimes.py module for converting between FILETIME and `datetime` objects.][filetimes] This code is released under a 2-clause BSD license.
>>> from filetimes import filetime_to_dt, dt_to_filetime, utc
datetime.datetime(1970, 1, 1, 0, 0)
datetime.datetime(2009, 7, 25, 23, 0)
>>> “%.0f” % dt_to_filetime(datetime(2009, 7, 25, 23, 0))
>>> dt_to_filetime(datetime(1970, 1, 1, 0, 0, tzinfo=utc))
>>> dt_to_filetime(datetime(1970, 1, 1, 0, 0))
I even remembered to write tests for once!