PHP转换WIM日期格式

时间:2012-09-14 07:07:30

标签: php .net windows

我正在为WIM files(长篇故事)编写一个包装库,但我在编码的日期方面遇到了困难。格式为:

[creationtime] => Array
                        (
                            [highpart] => 0x01CA0446
                            [lowpart] => 0x8E44DCAF
                        )

此格式位于WIM文件XML中。 我已经尝试了我能想到的每种日期解码技术! 任何想法将不胜感激。 我唯一需要做的就是与Long Integers和WIN32 DateTime相关的事情......但到目前为止还没有运气。

2 个答案:

答案 0 :(得分:1)

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"

答案 1 :(得分:0)

我认为它们可能与c / c ++ FILETIME结构有关

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx