导出数据时(rclick db | Tasks | Generate scripts ...)日期时间列以这种方式导出:
CAST(0xFFFF2E4600000000 AS DateTime)
上
select CAST(0xFFFF2E4600000000 AS DateTime)
..在 SQL Server Mgmt Studio 中我得到:
1753-01-01 00:00:00.000
我需要在另一个程序中将此(即此处的 0xFFFF2E4600000000)转换为常规日期时间。
现在,我知道该格式对于 1900 年 1 月 1 日之后的日期是如何工作的:
first 4 bytes == the days since 1st Jan 1900
2nd 4 bytes == number of ticks since midnight (each tick is 1/300 of a second).
这可行,但我无法弄清楚上面的十六进制数(0xFFFF2E4600000000)如何转换为 1753-01-01。2 的补码,1900 年到 1753 年之间的各种转换,等等 - 没有任何效果。它向我抛出的谷歌搜索结果也没有帮助。请指教!
更新:
无论如何,它似乎与 2 的补码有关,请参见以下内容,但在 Python shell 中它仍然不太有效:
>>> e=1900-1753
>>> e
147
>>>
>>> e*=365
>>> e
53655
>>> e=e-(1<<32)
>>> e
-4294913641L
>>> hex(e)
'-0xffff2e69L'
这接近 0xFFFF2E46 但并不完全存在。这里发生了什么?
更新 2:
闰日?