Почему дата kdb+ эпоха 2000.01.01?
Я новичок в kdb+ и мне было интересно, почему дата 2000.01.01 для kdb отличается от эпохи unix (1970.01.01).
Влияет ли разница на взаимодействие с операционной системой или другими языками?
3 ответа
KDB+ использует другую эпоху, потому что она следует другому стандарту. KDB+ соответствует международному стандарту J2000, который основан на юлианском году.
UNIX использует время POSIX, которое изначально было 32-разрядным целым числом без знака. Поскольку время рассчитывалось с точностью до 60-х секунд, 32-разрядное целое число будет работать только около 829 дней, поэтому пришлось выбирать более позднюю дату.
В первом издании Руководства программиста Unix от 3 ноября 1971 года время Unix определяется как "время с 00:00:00, 1 января 1971 года, измеренное в шестидесятых секундах".
Эта разница может вызвать проблемы, если вы не уверены, что хотите конвертировать в один стандарт, прежде чем отправлять выбранное время эпохи в приложения.
Проблемы, связанные с взаимодействием с системными / другими языками, должны решаться благодаря тому факту, что KDB может анализировать метки времени эпохи UNIX.
с http://code.kx.com/q/ref/casting/
Разбор меток времени Unix (от секунд, прошедших с эпохи Unix), строка с 9…11 цифрами:
q)"P"$"10129708800" 2290.12.31D00:00:00.000000000 q)"P"$"00000000000" 1970.01.01D00:00:00.000000000
Kdb+ доступен во многих различных операционных системах, в настоящее время Windows, Linux-x86, Linux-ARM и OSX доступны для загрузки с kx, с Solaris, ранее доступным.
На странице о системном времени в Википедии мы видим, что различные операционные системы используют разные даты и диапазоны эпох. Рассматривая две ОС, которые поддерживает kdb+, мы видим, что у них разные диапазоны эпох:
OS Epoch or range
-------------------------------------------------
Unix/Posix 1 January 1970 to 19 January 2038
Windows 1 January 1601 to AD 30,828
Использование эпохи Linux или Windows означало бы, что другой не совпадает в любом случае. Дальнейшее чтение на этой странице также показывает, что многие другие языки также используют свои собственные различные даты и диапазоны эпох.
Короче говоря, нет никакой причины, по которой языку нужно использовать время эпохи ОС, на которой он работает.