我有一个日期值,据说它是 8 个字节,一个“long”(又名 int64)值,并转换为十六进制:
60f347d15798c901
我如何使用 PHP 将这个和类似的值转换为时间/日期?
将其转换为十进制给我:
96 243 71 209 87 152 201 1
更多信息:原始值是 C# DateTime,应该表示大约 2 或 3 周前的时间/日期。
I found 另一个参考 http://www.digital-detective.co.uk/freetools/decode.asp这可能会指向一些更相关的信息。在本例中,为注册表中使用的 Windows 日期和时间。显然这些也存储为 64 位值。
这看起来更有帮助,因为它提到以 C?01 结尾是此类日期的指示符。请注意,这是小端字节序(即,最重要的字节在右侧),因此这些字节对于 hexdec() 来说是错误的字节顺序,而不一次将它们反转 2 个十六进制数字(即,从最右边的 2 个十六进制数字开始,然后是接下来的两个,依此类推)。
并且,根据这个来源 http://social.microsoft.com/Forums/en-US/vblanguage/thread/9a663255-94c8-426e-8aed-571ab97f4fe1,
一个刻度代表一百纳秒或百万分之一秒。该属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来经过的 100 纳秒间隔数。
不幸的是,PHP 无法处理 64 位整数,这可能会让您感到困惑。最大支持 32 位。浮点数会有所帮助,但这并不能阻止 hexdec() 本身只处理整数。所以做这个数学可能很复杂;您可能仍然需要将其分成两部分,然后通过将更重要的值转换为浮点数并将其乘以 2^32(也转换为浮点数)将它们组合成浮点数。为 64 位硬件构建的 PHP 可能没有此限制,但我不确定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)