1

我正在为WIM 文件(长篇故事)编写一个包装库,但我一直难以处理其中编码的日期。格式为:

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

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

4

2 回答 2

1

liCreationTimeLARGE_INTEGER在 WIM 规范中定义(我从 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"
于 2012-09-14T07:27:30.947 回答
0

我相信它们可能与 c/c++ FILETIME 结构有关

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

于 2012-09-14T07:26:28.230 回答