明確化: 私の方法に何か問題があるかどうか、またはそれを行うためのより不器用な方法があるかどうかを尋ねています。
ログ ファイルに 2 セットの UTC タイムスタンプがあり、それらの間で対応を確立する必要があります。1 つは YYYY:MM:DD hh:mm:ss:ms 形式を使用し、もう 1 つは .NET の DateTime.ToFileTimeUtc() から返される Int64 を使用します。Python で完全な日付形式を Int64 形式に変換することに着手しました。
.NET の DateTime.ToFileTimeUtc() ドキュメント: http://msdn.microsoft.com/en-us/library/system.datetime.tofiletimeutc.aspx
これに対する正しい解決策を見つけることは、紛らわしい狩りでした。残念ながら、python と .NET はそれぞれ 1970 年と 1601 年から始まる異なるエポックを使用しているように見えることがわかりました。
Python の calendar.timegm() は、秒単位で数量を取得するために使用します: http://docs.python.org/2/library/calendar.html#calendar.timegm
これが私が使用しているコードです。正常に動作しているようです。自分だけでなく、多くの人に役立つことを願っています。
from datetime import datetime
import calendar
NET_epoch = datetime(1601,1,1)
UNIX_epoch = datetime(1970,1,1)
epoch_delta = (UNIX_epoch - NET_epoch)
#example time in September, 2012
year = 2012
month = 9
day = 9
hour = 23
minute = 56
second = 22
millisecond = 12
#Thankfully I'm not worrying about timezones
log_time = datetime(year,month,day,hour,minute,second) #,millisecond)
# millisecond not included since its precision is not used at the moment.
unix_ts = calendar.timegm(log_time.timetuple())
#units of seconds since UNIX epoch
net_ts = calendar.timegm( (log_time + epoch_delta).timetuple() )
#units of seconds since NET epoch
net_filetime_ts = net_ts* (10**7) + millisecond * (10**4)
#units of 100 ns since NET epoch
#corresponds to .NET DateTime.Now.ToFileTimeUtc()