Microsoft Hex даты - PullRequest
       6

Microsoft Hex даты

3 голосов
/ 28 сентября 2011

У меня есть следующее из базы данных Microsoft SQL Server для значения даты / времени:

0x00009CEF00A25634

Я нашел этот пост: Помогите мне перевести длинное значение, выраженное в шестнадцатеричном виде, обратно в дату / время

Что, казалось, было на правильном пути, но, используя код, я не получил правильные даты, мои шестнадцатеричные даты в другом формате? Как бы я конвертировал их в обычную дату, я использую PHP / PostgreSQL.

Ответы [ 2 ]

8 голосов
/ 28 сентября 2011

select CAST (0x00009CEF00A25634 as datetime) дает 2009-12-30 09:51:03.000

Это два целых числа. Один для части даты 0x00009CEF (десятичный 40175) и один для части времени 00A25634 (десятичный 10638900). Часть даты - это целое число со знаком, дающее количество дней с 1 января 1900 года. Часть времени - это целое число, представляющее количество тиков.

В секунду 300 тиков.

Видно, что следующее также возвращает тот же результат

SELECT DATEADD(MILLISECOND,10638900*10/3.0, DATEADD(DAY,40175, '19000101'))

Вам нужно будет выяснить, как применить это к postgres.

Редактировать: ответ здесь , очевидно, делает это. Я не проверял это сам.

0 голосов
/ 18 апреля 2015

Это работает для меня при переходе с SQL на MySQL:

SELECT (CAST('1900-01-01 00:00:00' + INTERVAL CAST(CONV(substr(HEX( 0x0000A249004576D0 ),1,8), 16, 10) AS SIGNED) DAY + INTERVAL CAST(CONV(substr(HEX( 0x0000A249004576D0 ),9,8), 16, 10) AS SIGNED)* 10000/3 MICROSECOND AS DATETIME)) AS newdate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...