NTFSのタイムスタンプ

どうやらNTFSでは1601年1月1日0時0分からの100ナノ秒単位でタイムスタンプを計算しているらしい。

バイナリエディタなどで16進数で表現されたときにMACTimeなどを読めるように変換するときのプログラムのメモ.

# coding: utf-8
import datetime

val = 0x01d11121d618281a #16進数で表現された時刻
s100nano = 0x989680 # 100ナノ秒単位での1秒

d = datetime.datetime(1601, 1, 1, 0, 0, 0)

# 経過秒数を足して、日本時間に修正
print d + datetime.timedelta(seconds=val/s100nano,hours=9)