如何从很远的距离识别不同类型的时间戳(2003年)

2021-01-31 06:51:49

关于时间戳的伟大之处在于,有很多可供选择。 有时,在调试(或阅读不完整的文档)时,您会发现时间戳记,并且想知道如何将其转换为可读的内容。 这里有一些技巧。 自1970年1月1日UTC以来,UNIX时间戳以秒为单位。 它是一个32位数字,是唯一用作时间戳记的32位数字。 如果它是一个以“ 3”开头的32位值,则可能是UNIX时间。 (“ 3”时代始于1995年,结束于2004年。) C运行时time_t值与UNIX时间戳相同,因此,例如,您可以使用ctime()函数。 这是C运行时和Windows NT事件日志使用的时间格式。 自1600年1月1日以来,Win32 FILETIME值的计数间隔为100纳秒。 它是一个64位数字。 如果它是一个以“ 01”开头和字母开头的64位值,则可能是Win32 FILETIME。“ 01A”时代始于1972年,“ 01F”时代始于2057年。

要将这些值转换为可读的值,可以使用GetDateFormat()和GetTimeFormat()之后的FileTimeToSystemTime()函数。

警告:.NET的实际内容(很抱歉)。CLRSystem.DateTime值自1 UTC 1月1日起以100纳秒的间隔计数。它是一个64位数字。这些用的还不多。

如果它是一个以“ 08”开头和字母开头的64位值,则可能是CLR System.DateTime。“ 08A”始于1970年,“ 08F”时代则于2056年结束。

要将这些值转换为可读的值,请构造一个System.DateTime对象,将64位时间值作为构造函数参数传递。

24 16 8 0 +-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+- +-+-+ +-+-+-+-+-+-+-+-+ | Y | Y | Y | Y | Y | Y | Y | Y | M | | M | M | M | D | D | D | D | D | | h | h | h | h | h | m | m | m | | m | m | m | s | s | s | s | s | s | +-+-+-+-+-+-+-+-+++-+-+-+-+-+-+-+- + +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ \ ___________ / \ ________ // _________ / \ ________ / \ ______________ / \ _________ /年月日时分分秒

年份存储为与1980年的偏移量。秒以2秒为增量存储。(因此,如果“ second”值是15,则实际上代表30秒。)

要将这些值转换为可读性,请通过DosDateTimeToFileTime将其转换为FILETIME,然后将FILETIME转换为可读性。

OLE自动化日期格式是一个浮点值,用于计算自1899年12月30日午夜以来的天数。小时和分钟表示为小数天。 通常,两种格式之间没有直接转换; 您将必须通过一些中间格式。