UniVerse родной формат даты

Я нахожусь в процессе оптимизации некоторого кода доступа к данным UniVerse, который у нас есть, который использует UniObjects. После некоторых экспериментов кажется, что использование вызова UniSession.OConv для анализа определенных вещей, таких как десятичные числа (у большинства из нас MR4, или MR2, или MR2$), и дат (почти все из которых являются D2/) очень медленные (я думаю, что это может сделать обратный звонок на сервер, чтобы разобрать его).

Я уже построил парсер для кодов MR*[$], но мне было интересно узнать о датах, поскольку они хранятся, чтобы я мог создать парсер для D2/. Обычно они хранятся в виде 5-значного числа. Я думал, что это может быть число дней с начала Unix Epoch, так как наш сервер UniVerse работает на HP-UX, но после нахождения '15766' как даты последнего изменения и умножения его на 86400 (секунд в день) я получил 2 марта 2013 г. что не имеет смысла как дата последнего изменения, поскольку, насколько я знаю, это все еще в будущем.

Кто-нибудь знает, какова временная база этих чисел?

3 ответа

Решение

Хранится как количество дней. Просто сделайте преобразование на 0, и вы получите дату начала.

Редактировать:

Как отмечает Лос, эпоха, используемая в UniVerse (и UniData), - 31 декабря 1967 года.

В Universe и любой другой базе данных Pick даты и время хранятся в виде отдельных значений.

Внутренняя дата - это число дней до или после 31 декабря 1967 года, то есть нулевой день.

Внутреннее время - это количество секунд после полуночи. Это может быть сохранено как десятичное число, но не обычно.

В TCL есть CDT команда (расшифровывается как Convert Date), которая преобразует даты из читабельного человека в числовое и наоборот:

CDT 9/28/2017 
 * Result: 18169  

CDT 18169     
 * Result: 09/28/2017     
Другие вопросы по тегам