CAST HEX作为DATETIME - 如何获得约会?

时间:2012-08-20 07:15:39

标签: php sql-server datetime casting hex

我在PHP中处理SQL Server数据库转储时遇到问题。

我有一个名为datatime的列,其值为:

0x0000a0af00d7f2eb

我需要在PHP中提取此列的日期和时间值。我没有SQL Server可用,因此我无法使用CAST(0x0000a0af00d7f2eb AS datetime)的明显解决方案。

有人告诉我这个十六进制:0000a0af00d7f2eb由4个字节的日期和4个字节的时间创建。

所以我知道:

当我将0000a0af(前4个字节)更改为十进制时,我将获得从1900年开始的天数。这很好。

但是当我试图改变最后4个字节时(所以应该有时间):00d7f2eb到十进制我得到了一些我无法理解的东西。它应该是从午夜开始的时间(以毫秒为单位),有时这个值会低约3倍。

有人可以帮助将0000a0af00d7f2eb转换为日期吗?我知道时间是在凌晨5点到晚上11点之间,那一天是在上周。

2 个答案:

答案 0 :(得分:2)

根据Rene链接的另一个问题中的linked article,SQL Server在第二组4个字节中存储3.33毫秒的间隔,而不是毫秒。因此,如果你用毫秒计算,你的确会得到大约1/3的时间。使用您的示例,让我们从转换为十进制开始

  

00d7f2eb - > 14152427 3.3ms间隔

现在乘以3.3转换为毫秒,除以1000得到秒

  

14152427 * 3.3 / 1000~47127.58

所以这代表午夜后约47,000秒。一小时除以3600秒

  

47127.58 / 3600~13.091

因此,这表示午夜后约13.1小时的时间,这与在SQL Server中完成的转换结果一致。

答案 1 :(得分:0)

select CAST(0x0000a0af00d7f2eb AS datetime) as t

对我来说很好。并返回'2012年8月16日13:06:14-0700'。