B.1. Интерпретация данных даты и времени #
Строки с датой/временем разбираются при вводе по следующему алгоритму.
Разделить входную строку на фрагменты и определить каждый фрагмент как строку, время, часовой пояс или цифру.
Если числовой фрагмент содержит двоеточие (
:), значит эта строка представляет время. Включаются все последующие цифры и двоеточия.Если числовой фрагмент содержит тире (
-), косую черту (/) или две и более точек (.), то это строка даты, которая, возможно, включает название месяца. Если фрагмент даты уже встречался, он интерпретируется как название часового пояса (например,America/New_York).Если этот фрагмент является лишь числом, он представляет собой отдельное поле или составную дату ISO 8601 (например,
19990113для 13 января 1999 года) или время (например,141516для 14:15:16).Если фрагмент начинается с плюса (
+) или минуса (-), то это или числовой часовой пояс или специальное поле.
Если фрагмент содержит только буквы, сопоставить его с возможными строками:
Проверить, не совпадает ли фрагмент с известной аббревиатурой часового пояса. Эти аббревиатуры определяются параметрами конфигурации, описанными в Разделе B.4.
Если фрагмент не найден, проверить во внутренней таблице, не совпадает ли он со специальной строкой (например,
today), днём недели (например,Thursday), месяцем (наприме��,January) или игнорируемым словом (например,at,on).Если фрагмент всё же не найден, выдать ошибку.
Когда фрагмент является числом или числовым полем:
Если получено восемь или шесть цифр и никакое другое поле даты ранее не было прочитано, интерпретировать их как «составленную дату» (например,
19990118или990118). Такая дата интерпретируется какГГГГММДДилиГГММДД.Если фрагмент представляет собой трёхзначное число, и год уже был прочитан, интерпретировать как день года.
Если это четыре или шесть цифр и год уже был прочитан, интерпретировать как время (
ЧЧММилиЧЧММСС).Если найдены три или более цифр, а поля даты ещё не были найдены, интерпретировать как год (это ведёт к установке порядка гг-мм-дд для оставшихся полей даты).
В противном случае подразумевается, что порядок сортировки полей даты определяется значением
DateStyle: мм-дд-гг, дд-мм-гг или гг-мм-дд. Выдать ошибку, если оказалось, что поле месяца или дня вышло за пределы диапазона.
Если указан год до н. э., отнять год и добавить единицу для внутреннего хранения. (В григорианском календаре отсутствует нулевой год, поэтому 1 год до н. э. становится нулевым.)
Если год до н. э. не был указан, и если поле года имело два разряда, установить для записи года четыре разряда. Если поле меньше 70, добавить 2000, в противном случае добавить 1900.
Подсказка
Годы 1–99 н. э. по григорианскому календарю могут вводиться в виде четырёхзначного числа с начальными нулями (например,
0099— 99 год н. э.).