CAST HEX作为DATATIME-如何获取日期


CAST HEX as DATATIME - how to get date?

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

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

0x0000a0af00d7f2eb

我需要用PHP提取这一列的日期和时间值。我没有可用的SQL Server,所以我不能使用CAST(0x0000a0af00d7f2eb AS datetime)的明显解决方案。

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

所以我知道:

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

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

有人能帮我把0000a0af00d7f2eb转换成日期吗?我知道时间是在早上5点到晚上11点之间,这一天是在上周。

根据Rene链接到的另一个问题中的链接文章,SQL Server在第二组4字节中存储3.33毫秒的间隔,而不是毫秒。因此,如果你用毫秒计算,你确实会得到大约应该是它的1/3的时间

00d7f2eb->14152427 3.3ms间隔

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

14152427*3.3/1000 ~ 47127.58

因此,这代表午夜后约4.7万秒。一小时除以3600秒

47127.58/3600 ~ 13.091

因此,这表示午夜后大约13.1小时的时间,这与SQL Server中执行强制转换的结果一致。

select CAST(0x0000a0af00d7f2eb AS datetime) as t

对我来说运行良好。它返回"2012年8月16日13:06:14-0700"。