我正在为WIM files编写一个包装器库(长篇大论),但我在处理其中编码的日期时遇到了困难。格式为:
[creationtime] => Array
(
[highpart] => 0x01CA0446
[lowpart] => 0x8E44DCAF
)此格式位于WIM文件XML中。我已经尝试了我能想到的每一种日期解码技术!任何想法都将不胜感激。我唯一要做的就是与长整数和WIN32 DateTime相关的东西……但到目前为止还没什么好结果。
发布于 2012-09-14 15:27:31
在WIM规范中,liCreationTime被定义为LARGE_INTEGER (我是从微软下载的)
在我看来,这将与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"发布于 2012-09-14 15:26:28
我相信它们可能与c/c++ FILETIME结构有关
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
https://stackoverflow.com/questions/12419677
复制相似问题