1

私は、MFT レコードやその他の Windows アーティファクトを含めるために、生データを手動で再構築する必要がある状況にいます。MFT レコードのタイムスタンプは 64 ビット整数、ビッグ エンディアンであり、1601 年 1 月 1 日 00:00:00 UTC から 100 ナノ秒間隔で計算されることを理解しています。Windows の電子メール ヘッダーのタイムスタンプもよく知っています。これは、2 つの 32 ビット値を組み合わせて 1 つの 64 ビット値を形成するもので、これも 1601 年 1 月 1 日 00:00:00 UTC からの 100 ナノ秒間隔の数によって計算されます。 .

しかし、1800 年代の日付を使用していると思われる SQL Server タイムスタンプなど、異なるエポックを持つ Windows タイムスタンプが他にもあります。このすべてに関するドキュメントはあまり見つかりません。上記の 2 つ以外に Windows で使用されるタイムスタンプは何ですか? それらをどのように分解しますか?

4

1 に答える 1

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タイムスタンプのリファレンスは次のとおりです。

于 2011-08-07T03:24:26.573 に答える