Я не думаю, что даты AS / 400 хранятся внутри как некоторое количество дней от даты эпохи 1 (это более распространенный термин для того, что вы называете «нулевой датой»). Как сказала Трейси Пробст, это определенно НЕ то, как выглядят поля даты в физических файлах AS / 400. 2
Но это несущественно, если какой-либо метод, который вы используете для извлечения данных, дает вам количество дней с начала эпохи. В идеале вы должны выяснить, какая намеченная дата, посмотрев непосредственно на AS / 400 или спросив кого-то, кто может. Если дата в AS / 400 - 2009-07-30, а вы получаете 40022, то вы можете быть уверены, что дата эпохи - 1 января 1900 года. Если вы получаете 40024, то эпоха - 30 декабря, 1899. (Хотя, конечно, лучше сравнивать кучу дат, предпочтительно разных лет, чтобы не допустить возможного использования юлианских дат.)
Кроме того, как прокомментировал Трейси свой собственный ответ, очень часто даты хранятся в общих числовых полях (что я и предположил бы, если бы ваш метод поиска сообщал о десятичном виде как тип данных), и в этом случае это действительно в любом случае не имеет никакого отношения к внутреннему формату даты DB2. Вы должны знать, что наиболее распространенными форматами дат, хранящимися в числовых полях AS / 400, являются следующие или их варианты:
- ггггммдд (григорианский, ISO 4-значный год)
- ммддый (григорианский, США, двухзначный год)
- гггддд (так называемый юлианский, четырехзначный год)
- yyddd (так называемый юлианский, двузначный год)
- ггммдд
- cyymmdd (сумасшедшее изобретение IBM с вековым флагом)
Ддд в юлианских датах - это количество дней с начала года. C в сумасшедшей дате IBM 0 для 19yy или 1 для 20yy. Я не слышал ни о ком, кто хранит дни с тех пор на «Четырех сотнях», но, возможно, вы встречали новообращенного с другой платформы. Наследие мэйнфреймов в AS / 400 полностью поддерживает удобочитаемые даты.
1 AS / 400 (теперь называется IBM i) имеет свой собственный тип данных для дат, и этот тип данных на самом деле действительно состоит из нескольких дней из эпоха. Но эта эпоха составляет много тысячелетий в прошлом , не где-то на рубеже 20-го века и даже не в начале Общей Эры . IBM любит называть это число дней число Скалигера , но для большинства людей, которые изучают этот материал, оно называется номер дня Юлиана . Как вы, наверное, заметили из основной части моего ответа, IBM использует слово «юлианский» для обозначения чего-то совершенно другого (и даже не связанного с юлианским календарем ). А именно, так называемая «юлианская дата» IBM - это на самом деле порядковая дата из ISO 8601 .
2 Внутренний формат типа данных даты очень низкоуровневый и в основном скрыт от пользователя (включая большинство программистов). Команда DSPPFM, которая якобы показывает «фактическое содержимое» файла, по крайней мере, на один шаг «слишком поздняя»: сообщаемое ею значение уже преобразовано из внутреннего 4-байтового «числа Скалигера» в удобочитаемое человеком форма.