Вперед Назад Содержание

10. ФОРМАТЫ ВВОДА ДАТЫ

В этом разделе описываются текстуальные представления даты, которые принимает GNU. Это строки, которые вы, как пользователь, можете использовать как аргументы к разным программам. Интерфейс С (через функцию getdate) здесь не описывается.

Хотя синтаксис даты здесь может представлять любое время с нуля A.D., компьютерные целые числа недостаточно большие для такого (сравнительно) долгого времени. Наиболее ранняя дата, разрешенная для работы в системе Unix - полночь, 1 января 1970 UCT.

10.1 Общий синтаксис даты

Дата - строка, возможно пустая, содержащая много элементов, разделенных пробелами. Пробел может быть опущен, если не может возникнуть неоднозначность. Пустая строка означает начало этого дня (т.е. полночь). Порядок элементов несущественен. Строка даты может содержать много объектов элементов:

Мы опишем каждый из этих типов элементов ниже.

Некоторые числа в большинстве случаев можно записать словами. Это наиболее часто используется для задания элементов дня недели или относительных элементов. Вот список:

first - 1 second - 2 third - 3 fouth - 4 fifth - 5 sixth -6 seven - 7 eighth -8 nine - 9 tenth - 10 eleventh - 11 twelfth - 12 last - -1
Когда месяц записан таким образом, он рассматривается, как будто записан цифрами, это изменяет разрешенную строку.

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

10.2 Элемент календарной даты

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

1970-9-17 # ISO 8601 70-9-17 # Век подразумевается по умолчанию 70-09-17 # Начальные нули игнорируются 9/17/72 # Общепринятая запись США 24 Septenber 1972 24 Sept 72 # Сентябрь имеет особое сокращение 24 Sep 72 # Трехбуквенные сокращения разрешены всегда Sep 24, 1972 24-sep-72 24sep72
Год также можно пропускать. В этом случае используется последний заданный год или текущий. Например:

9/17 sep 17

Правила.

Для месяцев, записываемых числами, разрешен формат ISO 8601 'год-месяц-число', где год - любое положительное число, месяц - число от 1 до 12, а день - от 1 до 31. Если год меньше 100, к нему добавляется 1990. Разрешена конструкция 'месяц/число/год', популярная в Соединенных Штатах. И еще 'месяц/число', где пропускается год.

Месяцы, записываемые буквами, можно писать полностью: 'January', 'February', 'March', 'April', 'May', 'June', 'Jnly', 'August', 'September', 'October', 'November' или 'December'. Месяцы, записываемые цифрами, могут сокращаться по первым трем буквам, за которыми следует точка. Также можно писать 'Sept' вместо 'September'.

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

число месяц год число месяц месяц число год число-месяц-год
Или, пропуская число:

месяц число

10.3 Элемент времени суток

Элемент времени дня задает время данного дня. Вот несколько примеров, все из которых представляют одно и то же время:

20:02:0 20:02 8:02pm 20:02-0500 # B EST (Eastern U.S. Standard Time)
Чаще всего время суток задается 'часы/минуты/секунды', где часы - число от 0 до 23, минуты - число от 0 до 59, а секунды - число от 0 до 59. Иногда секунды пропускаются, в этом случае им присваивается нуль.

Если за временем следует 'am' или 'pm' (или 'a.m.' или 'p.m.), час может быть задан от 1 до 12, а минуты можно пропустить (им присваивается 0). 'am' обозначает первую половину дня, 'pm' -вторую половину дня. В этой записи 12 предшествует 1: полночь - '12am', а полдень - '12pm'.

Время может иногда подвергаться коррекции по часовому поясу, записанной как 'знак_часы_минуты', где знак - + или -, часы - число часов пояса, а минуты - число минут пояса. Когда поправка на пояс дана таким образом, она вызывает интерпретацию времени UTC, отменяя любое предыдущее задание часового пояса или местного часового пояса. Минуты можно умолчать, когда используется коррекция по часовому поясу. Это единственный способ задания коррекции по часовому поясу с помощью частей часа.

В поправке часового пояса могут быть заданы 'am' или 'pm', но не одновременно.

10.4 Элемент часового пояса

Элемент часового пояса задает международный часовой пояс, определяемый небольшим числом букв. Любой включенный период игнорируется. Для обозначения часового пояса используется одна буква. В элементе часового пояса могут быть представлены только полные часы. Для получения информации о лучшем контроле за коррекцией часового пояса см. предыдущий раздел.

Вот список часовых поясов, не сохраняющих дневной свет.

+000

'GMT' для Гринвича, 'UT' или 'UTC' для универсального (координационного), 'WET' для Западной Европы и 'Z' для войск.

+100

'WAT' для Западной Африки и 'A' для войск.

+200

'AT' для Азор и 'B' для войск.

+300

'C' для войск

+400

'AST' для Атлантического Стандарта и 'D' для войск.

500

'E' для войск и 'EST' для Восточного Стандарта.

+600

'CST' для Центрального Стандарта и 'F' для войск.

+700

'G' для войск и 'MST' для Горного Стандарта.

+800

'H' для войск и 'PST' для Тихоокеанского Стандарта.

+900

'I' для войск и 'YST' для Юконовского Стандарта.

+1000

'AHST' для Стандарта Аляска-Гаваи, 'CAT' для Центральной Аляски, 'HST' для Гавайского Стандарта и 'K' для войск.

+1100

'L'' для войск и 'NT' для Нома.

+1200

'IDLW' для Международной Западной Линии и 'M' для войск.

-100

'CET' для Центральной Европы, 'FWT для Французской Зимы, 'MET' для Средней Европы, 'MEWT' для Среднеевропейской Зимы, 'N' для войск и 'SWT' для Шведской Зимы.

-200

'EET' для Восточной Европы, зоны 1 СССР и 'O' для войск.

-300

'BT' для Багдада, зоны 2 СССР и 'P' для войск.

-400

'Q' для войск и 'ZP4' для зоны 3 СССР.

-500

'R' для войск и 'ZP5' для зоны 4 СССР.

-600

'S' для войск и 'ZP6' для зоны 5 СССР.

-700

'T' для войск и 'WAST' для Западно-Австралийского Стандарта.

-800

'CCT' для Китайского Берега, зоны 7 СССР и 'U' для войск.

-900

'JST' для Японского Стандарта, зоны 8 СССР и 'V' для войск.

-1000

'EAST' для Восточно-Австралийского Стандарта, 'GST' для Гвамского стандарта, зоны 9 СССР и 'W' для войск.

-1100

'X' для войск.

-1200

'IDLE' для Международной Восточной Линии, 'NZST' для Новозеландского Стандарта, 'NZT' для Новой Зеландии и 'Y' для войск.

Вот основные пояса DST:

0

'BST' для Британского Лета.

+400

'ADT' для Атлантического Дневного света.

+500

'EDT' для Восточного Дневного света.

+600

'CDT' для Центрального Дневного света.

+700

'MDT' для Горного Дневного света.

+800

'PDT' для Тихоокеанского Дневного света.

+900

'YDT' для Юконского Дневного света.

+1000

'HDT' для Гавайского Дневного света.

-100

'MEST' для Среднеевропейского Лета, 'MESC' для Среднеевропейского Лета, 'SST' для Шведского Лета и 'FST' для Французского Лета.

-700

'WADT' для Западно-Австралийского Дневного света.

-1000

'EADT' для Восточно-Австралийского Дневного света.

-1200

'NZDT' для Новозеландского Дневного света.

10.5 Элемент дня недели

Упоминание дня недели производится перед числом.

Дни недели можно записывать полностью: 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' и 'Saturday'. Можно их сокращать по первым трем буквам. Также разрешаются особые сокращения: 'Tues' для 'Tuesday', 'Wednes' для 'Wednesday' и 'Thur' или 'Thurs' для 'Thursday'.

Число может предшествовать элементу дня недели. Лучше использовать выражение типа 'third monday'. В этом контексте 'last день_недели' или 'next день_недели' тоже принимаются, происходит сдвиг на день назад или вперед от дня_недели.

Запятая, следующая за днем недели, игнорируется.

10.6 Элементы отношения в строке даты

Элементы отношения сдвигают дату вперед или назад. Эффект элементов отношения накапливается. Вот несколько примеров:

1 year 1 year ago 3 years 2 days
Единица перемещения во времени задается строкой 'day' или 'month'. Это неопределенные единицы, т.к. имеют неравную продолжительность. Более точные единицы - 'firtnight' - 14 дней, 'week' - 7 дней, 'day' - 24 часа, 'hour' - 60 минут, 'minute' или 'min' - 60 секунд, 'second' или 'sec' - 1 секунда. Суффикс 's' в этих единицах принимается и игнорируется.

Единице времени может предшествовать коэффициент, данный как заданное число. Числа без знака рассматриваются как положительные. Если нет множителя, подразумевается 1. Строка, за которой идет 'ago', эквивалентна указанной единице времени без 1.

Строка 'tomorrow' значит текущий день + 1, 'yestesday' эквивалентно 'day ago'.

Cтроки 'now' или 'today' - относительные элементы, обозначающие временной сдвиг ноль, т.е. текущее время. Они могут использоваться для уточнения других элементов, например '12:00 today'. Строка 'this' также имеет значение нулевого сдвига времени, но употребляется в строках даты типа 'this thursday'.

Когда относительный элемент заставляет результирующую дату пересекать границу между DST и non-DST (или наоборот), час регулируется согласно местному времени.

10.7 Обыкновенные числа в строке даты

Интерпретация обыкновенного десятичного числа зависит от контекста строки даты.

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

Если десятичное число в форме ччмм, и перед ним на строке даты нет других элементов времени дня, то чч - час, а мм - минута часа. мм можно опустить.

Если и календарная дата, и время дня возникают слева от числа на строке даты, но нет относительного элемента, то число замещает год.

10.8 Авторы getdate

getdate первоначально был разработан Стивеном М. Белловином ( smb@research.att.com) в Чапел Хилл Университета Северной Калифорнии. Позднее он был поддержан многими в пользовательской сети и полностью доработан Ричем Зальцем ( rsalz@bbn.cjm) и Джимом Беретсом ( jberets@bbn.com) в августе 1990г. Различные проверки системы GNU были сделаны Дэвидом Маккензи, Джимом Мейерингом и др.

Эта глава была сначала написана Франсуа Пинардом ( pinard@iro.unmotreal.ca) на основе кода источника 'getdate.y' и затем отредактирована К.Берри ( kb@cs.umb.edu).


Вперед Назад Содержание