PHP转换WIM日期格式


PHP converting WIM date format

我正在为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