В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13 |
Время и работа с ним
Опрос и установка показаний часов реального времени
Простейшим средством опроса и/или изменения текущих даты и времени является служебная программа date:
date [-u] [+формат] date [-u] ммддччмм[[вв]гг]
В первой форме утилита date выдает на стандартный вывод дату и время (по умолчанию - текущие), в соответствии с заданным форматом. Во второй форме date позволяет установить системные дату и время.
При наличии опции -u работа ведется без учета часового пояса, во всемирном времени (как если бы значением переменной окружения TZ была цепочка "UTC0" ). Без этой опции учитывается значение TZ или, если таковое не установлено или пусто, принимается во внимание системное подразумеваемое значение.
Если в командной строке date задан аргумент, начинающийся со знака +, форматом вывода даты и времени управляет пользователь. Формат включает спецификаторы преобразований и прочие символы (последние выводятся без изменений). Спецификаторы преобразований начинаются со знака % и замещаются при выводе соответствующим значением.
Чтобы установить текущие дату и время, необходимо, чтобы система допускала данное действие, а у процесса были соответствующие привилегии.
Во второй форме вызова утилиты date первая пара букв м обозначает номер месяца, дд - номер дня в месяце, чч - часы, мм - минуты, ввгг - год. Если две первые цифры года опущены, то диапазон [69, 99] трактуется как [1969, 1999], а [00, 68] - как [2000, 2068]. Если год не указан, имеется в виду текущий.
Приведем несколько примеров употребления служебной программы date.
Вывод в подразумеваемом формате, используемом командой date без аргументов, может выглядеть так:
Fri Dec 26 17:48:02 MSK 2003
Опция -u повлияет на вывод следующим образом:
Fri Dec 26 14:48:05 UTC 2003
date '+Дата: %d.%m.%Y%nВремя: %H:%M:%S'
выдаст примерно следующее:
Дата: 26.12.2003 Время: 17:49:15
Для сдвига показаний системных часов на один час вперед можно воспользоваться shell-процедурой, показанной в листинге 12.1 (предполагается, что ее выполняют днем при наличии соответствующих привилегий).
moda=`date +%m%d` ho=$((`date +%H` + 1)) mi=`date +%M` date ${moda}${ho}${mi}Листинг 12.1. Пример использования служебной программы date.