我正在为WIM文件编写一个包装库(长话短说),但我在其中编码的日期方面遇到了困难。格式为:
[creationtime] => Array
(
[highpart] => 0x01CA0446
[lowpart] => 0x8E44DCAF
)
此格式在WIM文件XML中。我已经尝试了我能想到的每一种日期解码技术!任何想法都将不胜感激。我唯一要做的是与Long Integers和WIN32 DateTime有关的事情。。。但到目前为止运气不佳。
liCreationTime
在WIM规范中定义为LARGE_INTEGER
(我从MS下载)
在我看来,这与QueryPerformanceCounter
返回的时间戳相似(如果不相同的话)——谢天谢地,这让事情变得非常简单!
我使用计算器和命令行PHP完成了这项工作,您必须自己实现代码。
取你的高位和低位部分,将它们转换为一个64位值。
0x01CA04468E44DCAF->128920240414579887
除以100000000
1289202404
将其用作date()
的输入
php -r "var_dump(date('Y-m-d H:i:s', 1289202404));"
string(19) "2010-11-08 07:46:44"
编辑:
或者我只是运气好。
如果它是自1601年以来的纳秒数,正如其他答案所表明的那样,您可以使用稍微不同的计算方法。
php -r "var_dump(date('Y-m-d H:i:s', (128920240414579887/100000000)-41651963));"
string(19) "2009-07-14 05:47:21"
我相信它们可能与c/c++FILETIME结构有关
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx