B.1. Интерпретация ввода даты/времени#

B.1. Интерпретация ввода даты/времени

B.1. Интерпретация ввода даты/времени

Строки ввода даты/времени декодируются с использованием следующей процедуры.

  1. Разбейте входную строку на компоненты и классифицируйте каждый компонент как строку, время, часовой пояс или число.

    1. Если числовой компонент содержит двоеточие (:), это строка времени. Включите все последующие цифры и двоеточия.

    2. Если числовой компонент содержит дефис (-), слэш (/) или две или более точки (.), это строка даты, которая может содержать текстовый месяц. Если компонент даты уже был обнаружен, он вместо этого интерпретируется как имя часового пояса (например, America/New_York).

    3. Если компонент содержит только числа, то это либо одно поле, либо объединенная дата в формате ISO 8601 (например, 19990113 для 13 января 1999 года) или время (например, 141516 для 14:15:16).

    4. Если компонент начинается с плюса (+) или минуса (-), то это либо числовой часовой пояс, либо специальное поле.

  2. Если компонент является буквенно-цифровой строкой, сопоставить с возможными строками:

    1. Убедитесь, соответствует ли компонент какому-либо известному сокращению часового пояса. Эти сокращения предоставляются конфигурационным файлом, описанным в Раздел B.4.

    2. Если не найдено, ищите внутреннюю таблицу для сопоставления компонента как специальной строки (например, today), дня (например, Thursday), месяца (например, January) или шумового слова (например, at, on).

    3. Если все еще не найдено, выдать ошибку.

  3. Когда компонент является числом или числовым полем:

    1. Если есть восемь или шесть цифр и ранее не было прочитано других полей с датами, то интерпретируйте их как "сцепленную дату" (например, 19990118 или 990118). Интерпретация будет в формате YYYYMMDD или YYMMDD.

    2. Если компонент состоит из трех цифр и год уже был прочитан, то интерпретируйте его как день года.

    3. Если уже было прочитано четыре или шесть цифр и год, то интерпретировать как время (HHMM или HHMMSS).

    4. Если найдено три или более цифры и пока не было обнаружено полей с датами, интерпретируйте их как год (это приведет к упорядочению оставшихся полей дат в формате гг-мм-дд).

    5. В противном случае предполагается, что порядок полей даты соответствует настройке DateStyle: mm-dd-yy, dd-mm-yy или yy-mm-dd. Если обнаружено, что месяц или день находятся вне допустимого диапазона, будет сгенерирована ошибка.

  4. Если было указано BC, инвертируйте год и добавьте единицу для внутреннего хранения. (В григорианском календаре нет года ноль, поэтому численно 1 BC становится годом ноль).

  5. Если BC не указано и если поле года имеет двузначную длину, то приведите год к четырехзначному формату. Если значение поля меньше 70, то добавьте 2000, в противном случае добавьте 1900.

    Подсказка

    Григорианские годы нашей эры 1–99 можно вводить, используя 4 цифры поставив нули в начале (например, 0099 - это 99 г. н.э.).