0

澄清:我在问我的方法是否有问题,或者是否有一种不那么笨拙的方法。

我在需要建立对应关系的日志文件中有两组 UTC 时间戳。一种使用 YYYY:MM:DD hh:mm:ss:ms 格式,另一种使用从 .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 回答