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