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