C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Утилиты оболочки GNU - 3. Форматы ввода даты
  [Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]  


3. Форматы ввода даты

Во-первых, цитата:

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

или ближайшее будущее, прошлый вторник или неделю после воскресенья, с ощущением беспомощности. ...

-- Роберт Грудин, `Время и искусство жить'.

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

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

3.1 Основной синтаксис даты

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

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

Несколько чисел могут быть написаны словами в большинстве случаев. Это наиболее полезно для указания дня недели или относительных пунктов (см. ниже). Вот список: `first' -- 1, `next' -- 2, `third' -- 3, `fourth' -- 4, `fifth' -- 5, `sixth' -- 6, `seventh' -- 7, `eighth' -- 8, `ninth' -- 9, `tenth' -- 10, `eleventh' -- 11 и `twelfth' -- 12. Также `last'означает -1.

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

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

3.2 Календарная дата

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

     1970-09-17           # ISO 8601.
     70-9-17              # По умолчанию XX век используется.
     70-09-17             # Лидирующие нули игнорируются.
     9/17/72              # Обычная запись в США.
     24 September 1972
     24 Sept 72           # September имеет специальное сокращение.
     24 Sep 72            # Трехбуквенные сокращения также допускаются.
     Sep 24, 1972
     24-sep-72
     24sep72

Год может быть опущен. В этом случае, используется последний указанный год, если такого нет -- текущий. Например:

     9/17
     sep 17

Здесь приведены правила.

Если месяц указан числом, допустим формат ISO 8601 `ГОД-МЕСЯЦ-ДЕНЬ', где ГОД -- это любое положительное число, МЕСЯЦ -- число между 01 и 12, ДЕНЬ -- число от 01 до 31. Лидирующий нуль должен быть указан, если число меньше 10. Если ГОД меньше 100, то 1900 добавляется к нему, для образования даты в XX веке. Конструкция `МЕСЯЦ/ДЕНЬ/ГОД', популярная в США допустима. Также `МЕСЯЦ/ДЕНЬ', опуская год.

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

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

     ДЕНЬ МЕСЯЦ ГОД
     ДЕНЬ МЕСЯЦ
     МЕСЯЦ ДЕНЬ ГОД
     ДЕНЬ-МЕСЯЦ-ГОД

Или, опуская год:

     МЕСЯЦ ДЕНЬ

3.3 Время суток

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

     20:02:0
     20:02
     8:02pm
     20:02-0500      # В EST (Стандартное восточное время в США).

случае они считаются равными нулю.

на вторую. В такой записи 12 предшествует 1: полночь это `12am', полдень -- `12pm'.

После времени может быть указан часовой пояс в виде `ЗЧЧММ', где З -- `+' или `-', ЧЧ -- количество часов в поясе, ММ -- количество минут в поясе. Когда часовой пояс задан таким образом, время интерпретируется относительно Coordinated Universal Time (UTC), перекрывая любые предыдущие спецификации часового пояса или местный частовой пояс. МИНУТЫ во времени суток не могут быть опущены, если указан часовой пояс. Это единственный способ указать часовой пояс используя дробные части часа.

Или `am'/`pm' или часовой пляс могут быть указаны, но не оба.

3.4 Часовой пояс

"Часовой пояс" определяет международный часовой пояс, указываемый небоьшим количеством букв. Они поддерживаются для обратной совместимости и не рекомендуются, потому что они неодносзначны на практике: сокращение `EST' имеет разное значение в США и Австралии. Точки игнорируются. В настоящее время только целые часы в поясах огут быть представлены в "часовом поясе". См. предыдущий раздел для лучшего управления часовыми поясами.

Здесь приведены не сберегащие дневное время часовые пояса, индексированные по поясному часу

`-1200'
`Y' для военных.
`-1100'
`X' для военных.
`-1000'
`W' для военных.
`-0900'
`V' для военных.
`-0800'
`PST' для стандартного тихоокеанского, и `U' для военных.
`-0700'
`MST' для стандартного горного, and `T' для военных.
`-0600'
`CST' для стандартного центрального, and `S' для военных.
`-0500'
`EST' для стандартного восточного, and `R' для военных.
`-0400'
`AST' для стандартного атлантического, and `Q' для военных.
`-0300'
`P' для военных.
`-0200'
`O' для военных.
`-0100'
`N' для военных.
`+0000'
`GMT' для Гривича, `UT' для универсального, `UTC' для Coordinated Universal, `WET' для восточно-европейского, and `Z' для ISO 8601 и военных.
`+0100'
`A' для военных, `CET' для центрально-европейского, `MET' для Голландии, и `MEZ' для Германии.
`+0200'
`B' для военных, и `EET' для восточно-европейского.
`+0300'
`C' для военных.
`+0400'
`D' для военных.
`+0500'
`E' для военных.
`+0600'
`F' для военных.
`+0700'
`G' для военных.
`+0800'
`H' для военных.
`+0900'
`I' для военных, и `JST' для стандартного японского.
`+1000'
`GST' for Guam Standard, and `K' для военных.
`+1100'
`L' для военных.
`+1200'
`M' для военных, and `NZST' для стандарного ново-зеландского.

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

`-0700'
`PDT' для тихоокеанского дневного.
`-0600'
`MDT' для горного дневного.
`-0500'
`CDT' для центрального дневного.
`-0400'
`EDT' для восточного дневного.
`-0300'
`ADT' для атлантического дневного.
`+0100'
`BST' для британского летнего, и `WEST' западно-европейского летнего.
`+0200'
`CEST' для центрально-европейского летнего, `MEST' для Голландии, и `MESZ' для Германии.
`+1300'
`NZDT' для ново-зеландского дневного.

3.5 День недели

Явное указание дня недели увеличавает дату (только в случае необходимости) для достижения того дня недели в будущем.

точкой. Специальные сокращения `Tues' для `Tuesday', `Wednes' для `Wednesday' и `Thur' или `Thurs' для `Thursday' также допустимы.

допустимы; они сдигают на неделю вперед или назад день, представляемый ДНЕМ.

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

3.6 Относительные элементы в строке даты

"Относительные элементы" устанавливают дату (или текущюу дату) вперед или назад. Эффект относительных пукнктов накпиливается. Вот несколько примеров.

     1 year
     1 year ago
     3 years
     2 days

Более точные единицы это: `fortnight', которая значаит 14 дней, `week' --- 7 дней, `day' -- 24 часа, `hour' -- 60 минут, `minute' или `min' --- 60 секунд и `second' или `sec' -- 1 секунда. Суффикс `s' для этих единииц допустим и игнорируется.

пунктам слово `ago' эквивалентно предварению единицы множителем -1.

Строка `tomorrow' значит один день в будущее, завтра, (эквивалентно `day'), строка `yesterday' -- один день в прошлое, вчера, (эквивалентно `day ago').

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

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

3.7 Непосредственные числа в строках данных

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

Если десятичное число имеет вид ГГГГММДД и никаких элементов календарной даты (раздел 3.2 Календарная дата перед ним нет в этой строке даты, то ГГГГ означает год, ММ -- месяц, а ДД -- день месяца.

Если десятичное число имеет вид ЧЧММ и никаких элементов времени суток перед ним нет в этой строке даты, то ЧЧ означает час суток, а ММ -- минуты часа. ММ может быть опущено.

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

3.8 Авторы `getdate'

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

Эта глава первоначально была создана Franc,ois Pinard (Френсисом Пинардом, наверное, если кому известно как его имя читается по-русски напишите) (pinard@iro.umontreal.ca) из исходных текстов `getdate.y', а затем подкорректирована К. Берри (kb@cs.umb.edu).


[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]  
Главная