澄清:我在问我的方法是否有问题,或者是否有一种不那么笨拙的方法。
我在需要建立对应关系的日志文件中有两组 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()