我的情况涉及手动重建原始数据,包括MFT记录和其他Windows工件。我知道MFT记录中的时间戳是64位整数,大端,并且是自01/01/1601 00:00:00 UTC以来的100纳秒间隔的数量计算的。我也熟悉Windows电子邮件标头时间戳,它由两个32位值组成,这些值组合形成一个64位值,也是自01/01/1601 00:00:00 UTC以来的100纳秒间隔数计算的
但是还有其他Windows时间戳具有不同的时期,例如SQL Server时间戳,我相信它使用1800年代的日期。关于这一切,我找不到太多文件。 Windows中使用的时间戳除了上面列出的两个以外?你怎么打破他们?
答案 0 :(得分:1)
以下是解码Windows时间戳的一些代码:
static string microsoftDateToISODate(const uint64_t &time) {
/**
* See comment above for more information on
* SECONDS_BETWEEN_WIN32_EPOCH_AND_UNIX_EPOCH
*
* Convert UNIX time_t to ISO8601 format
*/
time_t tmp = (time / ONE_HUNDRED_NANO_SEC_TO_SECONDS)
- SECONDS_BETWEEN_WIN32_EPOCH_AND_UNIX_EPOCH;
struct tm time_tm;
gmtime_r(&tmp, &time_tm);
char buf[256];
strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S", &time_tm);
return string(buf);
}
您对Mac时间戳的参考是: