Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Peter Leung, "Командная строка: маленькие хитрости от Linux Commando"
Фокусы с датами
Оригинал: Fun with Date ArithmeticАвтор: Peter Leung
Дата: 14 ноября 2009
Свободный перевод: Алексей Дмитриев
Дата перевода: 21 июля 2010
Все знают команду date, которая сообщает нам текущее время и дату. Изредка ею пользуются, чтобы скорректировать системное время. Это бывает все реже, так как появился сервис ntp, автоматически синхронизирующий системное время с сервером точного времени по вашему выбору.
Сегодня в ходу многочисленные реализации команды date. В этой статье говорится только о команде date из пакета GNU coreutils.
По умолчанию команда сообщает текущую дату и время.
$ date Sat Nov 14 17:54:51 PST 2009
Команда позволяет вам также производить основные вычисления будущих или прошедших дат. Для этого нужно применить опцию -d, а в качестве параметра указать желаемый отрезок времени вперед или назад:
$ date -d -30days Thu Oct 15 18:54:56 PDT 2009
Сколько раз вы вычисляли, какой был день недели и число N дней назад? Только вчера мне необходимо было вспомнить дату 30 дневной давности, чтобы найти нужный лог.
Для вычисления будущей даты вместо минуса ставим плюс:
$ date -d +30days Thu Oct 15 18:54:56 PDT 2009
Кроме дней (days) единицами могут служить годы (years), месяцы (months), минуты (minutes) и секунды (seconds).
$ date -d +2months Thu Jan 14 18:48:43 PST 2010
Их можно также комбинировать:
$ date -d +2months17days Sun Jan 31 18:49:45 PST 2010
Все вычисления мы производили относительно настоящего момента. А как насчет отсчета десяти дней от завтрашнего дня? Легко:
$ date -d tomorrow+10days Wed Nov 25 18:52:03 PST 2009
Или назад от вчерашнего:
$ date -d yesterday-10days Tue Nov 3 18:53:07 PST 2009
В качестве точки отсчета можно указать любой день, например, 21 января 2010:
$ date -d '2010-01-21 + 2 weeks 3 days' Sun Feb 7 00:00:00 PST 2010
И, наконец, команда распознает дни недели (Понедельник, Вторник и так далее) и два ключевых слова: "last" (прошлый) и "next" (следующий). Вот пример:
$ date -d 'next tuesday + 1 day' Wed Nov 18 00:00:00 PST 2009
Надеюсь, вы получили удовольствие от знакомства с этой разносторонней командой.