0

明確化: 私の方法に何か問題があるかどうか、またはそれを行うためのより不器用な方法があるかどうかを尋ねています。

ログ ファイルに 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()
4

1 に答える 1

0

おそらく、C# で UNIX エポックに関連する時間を取得する方が、より便利で簡単なのでしょうか? 次のようになるはずです。

(DateTime.UtcNow - new DateTime (1970, 1, 1)).TotalMilliseconds
于 2013-08-24T20:46:41.177 に答える