Приложение 1. КРАТКОЕ ИЗЛОЖЕНИЕ МЕЖДУНАРОДНОЙ СТАНДАРТНОЙ НОТАЦИИ ДАТЫ И ВРЕМЕНИ

Приложение 1

КРАТКОЕ ИЗЛОЖЕНИЕ
МЕЖДУНАРОДНОЙ СТАНДАРТНОЙ НОТАЦИИ ДАТЫ И ВРЕМЕНИ

Международный стандарт ISO 8601 обозначает числовые представления даты и времени. Нотация этого стандарта помогает избежать путаницы в международном общении, вызванной различными национальными нотациями, и увеличивает мобильность компьютерных пользовательских интерфейсов. Кроме того, эти форматы обладают несколькими важными преимуществами для использования на компьютерах по сравнению с другими традиционными нотациями даты и времени. Нотация времени, описанная здесь, является стандартом де-факто почти во всех странах, а нотация даты становится все более популярной.

Стандарт ISO 8601 особенно важен для разработчиков web - страниц и разработчиков программного обеспечения, проектирующих пользовательские интерфейсы, форматы файлов и протоколы передачи данных.

Дата

Нотацией даты международного стандарта является

    YYYY-MM-DD,
где  YYYY  является  годом в обычном  григорианском календаре,  MM
является месяцем  года  между  01 (январем) и 12 (декабрем),  а DD
является днем месяца между 01 и 31.

Например, четвертый день февраля в 1995 году записывается в стандартной нотации как

1995-02-04.

Другими обычно используемыми нотациями являются, например, 2/4/95, 4/2/95, 95/2/4, 4.2.1995, 04-FEB-1995, 4-February-1995 и многие другие. Особенно опасными являются первые два примера, поскольку оба используются довольно часто в США и Великобритании и оба не могут быть различены, так как остается неясным, означает ли 2/4/95 дату 1995-04-02 или 1995-02-04. Обозначение даты 2/4/5 имеет по меньшей мере шесть разумных интерпретаций (с учетом того, что в нашей жизни только двадцатое и двадцать первое столетия являются разумными кандидатами).

Преимущества нотации даты стандарта ISO 8601 по сравнению с другими обычно используемыми вариантами:

- легко читается и пишется программным обеспечением (нет необходимости в таблице 'JAN', 'FEB',...);

- легко сравнивается и сортируется с обычным сравнением строк;

- не зависит от языка;

- не может быть спутана с другими популярными нотациями даты;

- сходна с обычной 24-часовой нотацией времени, где большие единицы (часы) также записываются впереди меньших единиц (минут и секунд);

- строки, содержащие дату, за которой следует время, также легко сравниваются и сортируются (например, "1995-02-04 22:45:00");

- нотация имеет постоянную длину, что облегчает ввод данных с клавиатуры и макетирование таблиц;

- идентична китайской нотации даты, так что крупнейшая на планете культурная группа (> 25%) уже знакома с ней;

- нотация даты с порядком "год, месяц, день" широко используются в Японии, Корее, Венгрии, Швеции, Финляндии, Дании и некоторых других странах, а в США уже привыкли к порядку "месяц, день";

- представление года четырьмя цифрами позволяет избежать проблем переполнения после 1999-12-31.

Так как даты начиная с 2000-01-01 будут выглядеть немного странно (например, 1/1/0), наступление 2000 года дает возможность перейти на стандартную нотацию даты.

Помимо рекомендованной основной стандартной нотации YYYY-MM-DD в ISO 8601 обозначен также ряд альтернативных форматов для использования в приложениях с особыми требованиями. Все эти форматы могут легко и автоматически различаться.

Черточки могут быть опущены, если компактность представления является более важной, чем читаемость для человека, например:

19950204.

В ситуациях, где информация о столетии действительно не требуется, возможно представление года двумя цифрами:

95-02-04 или 950204.

Если интерес представляет только месяц или даже только год:

1995-02 или 1995.

В коммерческих или промышленных приложениях (время доставки, производственные планы и т.д.), особенно в Европе, часто требуется ссылка на неделю года. Неделей 01 года является по определению первая неделя, которая имеет четверг в этом году, что эквивалентно неделе, которая содержит четвертый день января. Другими словами, первой неделей нового года является неделя, которая имеет большинство своих дней в новом году. Неделя 01 может также содержать дни из предыдущего года, и неделя перед неделей 01 года является последней неделей (52 или 53) предыдущего года, даже если она содержит дни из нового года. Неделя начинается с понедельника (день 1) и заканчивается воскресеньем (день 7). Например, первая неделя 1997 года длится с 1996-12-30 по 1997-01-05 и может быть записана в стандартной нотации как

1997-W01 или 1997W01.

Нотация недели может также расширяться номером, указывающим день недели. Например, день 1996-12-31, который является вторником (день 2) первой недели 1997 года, может быть записан как

1997-W01-2 или 1997W012.

Для приложений, подобных промышленному планированию, где многое (например, ротация смен) организовано по неделям, и знание номера недели и дня недели более удобно, чем знание дня месяца.

Сокращенная версия года и номера недели такая, как

    95W05,
полезна  иногда  в  качестве  печатаемого  на продукте компактного
кода, который указывает, когда данный продукт был произведен.

Стандарт ISO избегает явного указания возможного диапазона номеров недели, но его можно легко вывести из определения.

Теорема. Возможные номера недель по ISO находятся в диапазоне от 01 до 53. Год всегда имеет неделю 52. (Имеется одно историческое исключение: год, в который был введен григорианский календарь, имел менее 365 дней и менее 52 недель.)

Доказательство. По определению первой неделей года является W01, и, следовательно, дни перед неделей W01 принадлежат предыдущему году, и, таким образом, не существует недели с меньшим номером. При рассмотрении максимального возможного номера наихудшим случаем является високосный год, подобный 1976 году, который начинается четвергом, поскольку это удерживает в предыдущем году наибольшее возможное число дней недели W01 - 3 дня. В этом случае воскресенье недели W52 года, являющегося наихудшим случаем, имеет номер дня 4 + 51 x 7 = 361, и 361 - 366 = 5 дней недели W53 принадлежат еще этому году. Это гарантирует, что в году, являющемся наихудшим случаем, день 4 (четверг) недели W53 не относится еще к следующему году, поэтому возможен номер недели 53. Например, 53-я неделя являющегося наихудшим случаем 1976 года началась с 1975-12-29 = 1976-W01-1 и закончилась 1977-01-02 = 1976-W53-7. С другой стороны, при рассмотрении самого низкого номера последней недели года наихудшим случаем является невисокосный год, подобный 1999 году, который начинается с пятницы. Это гарантирует, что первые три дня года принадлежат последней неделе предыдущего года. В этом случае воскресенье недели 52 будет номером дня 3 + 52 x 7 = 367, то есть только последние 367 - 365 = 2 дня недели W52 переходят в следующий год, и, следовательно, даже являющийся наихудшим случаем год, подобный 1999 году, имеет неделю W52, включающую дни с 1999-12-27 по 2000-01-02. Что и требовалось доказать.

День и год являются полезными единицами структурирования времени вследствие того, что ими описывается положение Солнца на небе, которое влияет на жизнь человека. Однако деление года на 12 месяцев имеет таинственное происхождение, и в настоящее время у него нет никакого реального назначения, за исключением того, что люди к нему привыкли (оно даже не описывает текущего положения Луны). В некоторых приложениях предпочтительной является нотация, которая использует только год и день года между 001 и 365 (366 в високосных годах). Стандартная нотация для такого варианта, представляющего день 1995-02-04 (который является 035 днем 1995 года), -

1995-035 или 1995035.

Високосными годами являются годы с дополнительным днем YYYY-02-29, где номер года кратен четырем, за следующим исключением. Если год кратен 100, то он является високосным, если он кратен также 400. Например, 1900 год не был високосным годом, а 2000 год является високосным годом.

Время дня

Международной стандартной нотацией для времени дня является

    hh:mm:ss,
где  hh  -  число  полных   часов,   которые   прошли  с  полуночи
(00-24), mm - число полных минут,  которые прошли  с  начала  часа
(00-59), ss  -  число полных секунд с начала минуты (00-59).  Если
значением часа является 24,  то значения минуты  и  секунды должны
быть нулем.  (Хотя ISO 8601 этого не упоминает, значение 60 для ss
может иногда понадобиться при вставке високосной секунды в атомной
шкале времени,  подобной скоординированному универсальному времени
(UTC). Одна  високосная  секунда  23:59:60  вставляется  в   шкалу
времени UTC раз в несколько лет по объявлению Международной службы
вращения Земли в Париже для удержания ухода UTC более чем на 0,9 с
от менее  постоянной  астрономической  шкалы времени UT1,  которая
определяется действительным вращением Земли.)

Примером времени является нотация

    23:59:59,
которая представляет время без одной секунды полночь.

Как и в нотации даты, разделяющие двоеточия могут быть опущены, как в

    235959,
и точность  может быть уменьшена - опущены  секунды  или секунды и
минуты, как в

23:59 (2359) или 23.

Можно также добавлять доли секунды после десятичной точки или запятой, например, время полночь без 5.8 ms может быть записано как

23:59:59.9942 или 235959.9942.

Так как день начинается и заканчивается в полночь, то доступны два обозначения - 00:00 и 24:00 - для различения полуночей, которые могут быть связаны с одной датой. Это означает, что следующие два обозначения относятся к одной и той же точке во времени:

1995-02-04 24:00 = 1995-02-05 00:00.

В случае, если требуется недвусмысленное представление времени, предпочтительным обозначением для полуночи является обычно обозначение 00:00, а не 24:00. Цифровые часы показывают 00:00, а не 24:00.

ISO 8601 не указывает, обозначают ли его нотации точку во времени или период времени. Это значит, например, что ISO 8601 не определяет, относится ли 09:00 к точному концу девятого часа дня, к периоду от 09:00 до 09:01 или к чему-то другому. Пользователи стандарта должны каким-то образом прийти к согласию относительно точной интерпретации обозначения времени, если это будет иметь какое-либо значение.

Если дата и время отображаются в одной и той же строке, то дату всегда пишут впереди времени. Если дата и значение времени хранятся вместе в одном поле данных, то ISO 8601 предлагает, чтобы они разделялись латинской заглавной буквой Т, как в 19951231Т235959.

Замечания о стандартах, принятых в США

24-часовая нотация времени, приведенная здесь, стала стандартом де-факто во всем мире в письменном языке уже десятилетия. Исключением являются некоторые англоговорящие страны, где еще широко используются обозначения часов от 1 до 12, и такие дополнения, как "a.m." и "p.m.". Общепринятая 24-часовая международная нотация начала в настоящее время широко использоваться даже в Англии. Большинство других языков не имеют сокращений, подобных "a.m." и "p.m.", и 12-часовая нотация едва ли когда-либо использовалась в континентальной Европе для записи или отображения времени. В США военные и программисты используют 24-часовую нотацию уже длительное время.

Старая английская 12-часовая нотация имеет много недостатков:

- она длиннее 24-часовой нотации;

- людям требуется намного больше времени для сравнения двух времен в 12-часовой нотации;

- неясно, как представляются 00:00, 12:00 и 24:00 (даже энциклопедии и руководства по стилю содержат противоречащие друг другу описания и обычно советуют избегать "12 a.m. / p.m." и писать вместо этого "полдень", "полночь" или "12:01 a.m. / p.m.", хотя слово "полночь" не различает 00:00 и 24:00);

- она часто заставляет людей верить, что следующий день начинается при переходе от "12:59 a.m." к "1:00 p.m.", что является обычной проблемой, не только когда люди пытаются программировать таймер видеомагнитофона вскоре после полуночи;

- она не является легко сравнимой с помощью операции сравнения строк;

- для непосвященных неясно, начинается ли время между "12 a.m. / p.m." и "1 a.m. / p.m." в 00:00 или в 12:00, то есть английскую 12-часовую нотацию понять трудней.

12-часовая нотация - пережиток тех времен, когда использовались римские цифры, число "ноль" еще не было придумано и аналоговые часы были единственным известным видом отображения времени. Избегайте, пожалуйста, ее использования в настоящее время, особенно в технических приложениях!

Замечания о стандартах, принятых в немецкоязычных странах

В мае 1996 года был обновлен германский стандарт DIN 5008, определяющий типографские правила для текстов на немецком языке. Старые немецкие нотации для обозначения даты цифрами DD.MM.YYYY и DD.MM.YY были заменены нотациями даты YYYY-MM-DD и YY-MM-DD стандарта ISO. Подобным же образом старые немецкие нотации времени hh.mm и hh.mm.ss были заменены нотациями hh:mm и hh:mm:ss стандарта ISO. Сохраняется немецкая алфавитно - цифровая нотация, например, "3. August 1994" или "3.Aug. 1994". Соответствующий австрийский стандарт использует нотации даты и времени ISO 8601.

ISO 8601 был принят в качестве европейского стандарта EN 28601 и является, таким образом, действующим стандартом во всех странах Европейского союза, и все национальные стандарты были надлежащим образом изменены.

Временная зона

Без каких-либо дальнейших пояснений дата и время, записанные вышеприведенными способами, считаются относящимися к какой-то локальной временной зоне. Чтобы указать, что речь идет об универсальном времени (UTC), вы можете добавить ко времени заглавную букву Z, как в

    23:59:59Z или 2359Z.
(Z  -  обозначение  "нулевого  меридиана",  который проходит через
Гринвич  в Лондоне.  Оно  обычно используется в радиосвязи,  где Z
произносится  как  "Zulu".  Универсальное время,  иногда именуемое
"время  Zulu",  называлось  средним  временем по Гринвичу (GMT) до
1972  года,  однако  этот  термин не должен больше использоваться.
Вследствие  ввода  международной  атомной  шкалы времени почти все
существующие  гражданские временные зоны в настоящее время связаны
с UTC, которое слегка отличается от не использующегося в настоящее
время GMT.)
    Строки
    +hh:mm, +hhmm или +hh
могут быть добавлены к обозначению  времени,  чтобы  показать, что
используемая локальная временная зона находится впереди UTC  на hh
часов  и  mm  минут.  Для  временных  зон  на  запад  от  нулевого
меридиана, которые  отстают  от  UTC,  вместо  этого  используется
нотация
    -hh:mm, -hhmm или -hh.

Например, центральное европейское время (СЕТ) есть +0100, а канадское восточное стандартное время (EST) есть -0500. Все следующие нотации указывают на одну и ту же точку времени:

12:00Z = 13:00 + 01:00 = 0700 - 0500.

Не существует международного стандарта, который указывает сокращения для гражданских временных зон, подобные CET, EST и т.д., и иногда одно и то же сокращение используется для двух разных временных зон. Кроме того, политики любят менять правила для гражданских временных зон (например, с целью экономии светового дня) каждые несколько лет, поэтому единственным действительно надежным способом описания локальной временной зоны является обозначение числом разности местного времени и UTC. Лучше использовать, где возможно, непосредственно UTC в качестве вашей единственной временной зоны.