There are two date and time formats used by the Win32 and INT 21h APIs. The DOS time format is used in the INT 21h APIs. The date and time are stored as bit fields in a dword.
The hour, minute, and second are stored in the low-order word in the following format:
+---------------+---------------+
|H|H|H|H|H|M|M|M|M|M|M|S|S|S|S|S|
+---------------+---------------+
15 0
Where "H" is the hour (0 through 23), "M" is the minute (0 through 59), and "S" is the number of seconds divided by 2. For the new Create Time APIs, additional precision has been added by specifying the 10 millisecond remainder in the 2 second interval that the DOS time format provides for. This remainder can be a value between 0 and 199.
The year, month, and day are stored in the high-order word in the following format:
+---------------+---------------+
|Y|Y|Y|Y|Y|Y|Y|M|M|M|M|D|D|D|D|D|
+---------------+---------------+
15 0
Where "Y" is the year minus 1980, "M" is the month (1 = January, 2 = February, etc.), and "D" is the day of the month (1 through 31).
The Win32 time format is used by the Win32 APIs. The date and time is stored in a 64-bit value that represents the number of 100 nanoseconds since January 1st, 1601. This date was chosen because it is 400 years prior to the start of a new century. At 100ns resolution 32 bits is good for about 429 seconds (or 7 minutes) and a 63-bit integer is good for about 29,247 years.