В Linux команда date
отображает и устанавливает системную дату и время, позволяет выводить время в различных форматах и вычислять будущие и прошлые даты.
Содержание
- Синтаксис
- Опции
- Параметры формата
- Использование команды date в Linux
- Использование date вместе с другими командами
- Выводы
Синтаксис
date [ПАРАМЕТР]… [+ФОРМАТ]
Опции
- -d, --date=СТРОКА
- Показать не текущее время, а время, описанное заданной СТРОКОЙ
- --debug
- Описывать разбираемую дату и предупреждать о сомнительном использовании в stderr
- -f, --file=ФАЙЛ
- Как --date для каждой строки из ФАЙЛА
- -I[ФОРМ_ВРЕМЕНИ], --iso-8601[=ФОРМ_ВРЕМЕНИ]
- Вывод даты/времени в формате ISO 8601. Только дату, если ФОРМ_ВРЕМЕНИ="date"» (по умолчанию), "hours", "minutes", "seconds" или "ns" для получения даты и времени с нужной точностью. Пример: 2006-08-14T02:34:56-06:00
- --resolution
- Вывести доступное разрешение временных меток Пример: 0.000000001
- -R, --rfc-email
- Выводить дату и время в соответствии с RFC-2822. Пример: Mon, 14 Aug 2006 02:34:56 -0600
- --rfc-3339=СПЕЦ
- Вывести дату/время в формате RFC 3339 СПЕЦ="date", "seconds" или "ns" для получения даты и времени с указанной точностью. Пример: 2006-08-14 02:34:56-06:00
- -r, --reference=ФАЙЛ
- Показать время последнего изменения ФАЙЛА
- -s, --set=СТРОКА
- Установить время, описанное СТРОКОЙ
- -u, --utc, --universal
- Показать или установить универсальное координированное время (UTC)
Параметры формата
Воспринимаются следующие последовательности:
- %%
- Знак %
- %a
- Сокращённое название дня недели (напр., вск) согласно локали
- %A
- Полное название дня недели (напр., понедельник) согласно локали
- %b
- Сокращённое название месяца (напр., янв) согласно локали
- %B
- Полное название месяца (напр., январь) согласно локали
- %c
- Время и дата (напр., Чтв 3 Мар 23:05:25 2005) согласно локали
- %C
- Век; как %Y, но не указываются две последние цифры (напр., 20)
- %d
- День месяца (напр., 01)
- %D
- Дата; аналогично %m/%d/%y
- %e
- День месяца, дополненный пробелами; аналогично %_d
- %F
- Полная дата; эквивалентно %+4Y-%m-%d
- %g
- Последние две цифры года для номера недели ISO (см. %G)
- %G
- Год для номера недели ISO (см. %V); обычно бывает полезно только с %V
- %h
- То же, что и %b
- %H
- Час (00..23)
- %I
- Час (01..12)
- %j
- Номер дня в году (001..366)
- %k
- Час, дополняется пробелом ( 0..23); то же, что и %_H
- %l
- Час, дополняется пробелом ( 1..12); то же, что и %_I
- %m
- Месяц (01..12)
- %M
- Минуты (00..59)
- %n
- Новая строка
- %N
- Наносекунды (000000000..999999999)
- %p
- Эквивалент AM или PM согласно локали; пусто, если неизвестно
- %P
- Как %p, но строчными буквами
- %q
- Квартал года (1..4)
- %r
- Время согласно локали, 12-часовой формат (напр., 11:11:04 PM)
- %R
- Часы и минуты согласно локали, 24-часовой формат; аналог %H:%M
- %s
- Число секунд с начала эпохи (1970-01-01 00:00:00 UTC)
- %S
- Секунда (00..60)
- %t
- Табуляция
- %T
- Время, аналог %H:%M:%S
- %u
- День недели (1..7); 1 обозначает понедельник
- %U
- Номер недели в году, если первый день недели -- воскресенье (00..53)
- %V
- Номер недели по ISO, если первый день недели -- понедельник (01..52)
- %w
- День недели (0..6), 0 означает воскресенье
- %W
- Номер недели в году, если первый день недели -- понедельник (00..53)
- %x
- Представление даты (напр., дд/мм/гг) согласно локали
- %X
- Представление времени (напр., 23:13:48) согласно локали
- %y
- Последние две цифры года (00..99)
- %Y
- Год
- %z
- +ччмм часового пояса (напр., -0400)
- %:z
- +чч:мм часового пояса (напр., -04:00)
- %::z
- +чч:мм:сс часового пояса (напр., -04:00:00)
- %:::z
- Часовой пояс с достаточным количеством двоеточий (напр., -04, +05:30)
- %Z
- Буквенная аббревиатура часового пояса (напр., EDT)
По умолчанию команда date
дополняет числовые поля нулями. После %
могут идти следующие необязательные флаги:
- -
- (дефис) не дополнять это поле
- _
- (подчёркивание) дополнять пробелами
- 0
- (нуль) дополнять нулями
- +
- дополнять нулями и помещать «+» перед будущими годами >4 цифр
- ^
- использовать верхний регистр, если возможно
- #
- использовать противоположный регистр, если возможно
После любого из флагов идет необязательная ширина поля в виде десятичного числа, затем необязательный модификатор, один из следующих:
- E
- Если возможно, использовать альтернативное представление для текущей локали
- O
- Если возможно, использовать альтернативные числовые символы локали
Использование команды date в Linux
Текущее системное время и дата
Для того чтобы показать текущее системное время и дату, введите команду date
без опций:
oleg@mobile:~:$ date
Вс 06 ноя 2022 13:38:12 EET
oleg@mobile:~:$
В выходных данных отображены день недели, день месяца, месяц, год, текущее время и часовой пояс. По умолчанию команда date
настроена на часовой пояс операционной системы.
Заданное время и дата
В данном случае используется опция -d
:
oleg@mobile:~:$ date -d "2001-12-31 23:59:59"09:10:15"
Пн 31 дек 2001 23:59:59 EET
oleg@mobile:~:$
Эта команда конечно же не влияет на фактические значения даты и времени в системе и выводит лишь запрошенную дату и время.
Установка или изменение даты
Вы можете изменить системные часы вручную. Например, чтобы установить дату и время на 07:30 11 мая 1999 г., введите:
oleg@mobile:~:$ date --set="19991011 07:30"
При выполнении этой команды будьте осторожны, так как на многих дистрибутивах Linux системные часы синхронизируются с помощью служб ntp или systemd-timesyncd.
Вывод прошлых дат
Для отображения прошлых дат в Linux используйте опцию --date
со следующими значениями: "tomorrow", "Friday", "last Friday", "next Friday", "next week" и подобными.
Примеры:
oleg@mobile:~:$ date --date="2 weeks ago"
Вс 23 окт 2022 15:20:05 EEST
oleg@mobile:~:$
oleg@mobile:~:$ date --date="yesterday"
Сб 05 ноя 2022 14:21:45 EET
oleg@mobile:~:$
oleg@mobile:~:$ date --date="3 hours ago"
Вс 06 ноя 2022 11:22:33 EET
oleg@mobile:~:$
Вывод будущих дат
Примеры:
oleg@mobile:~:$ date --date="3 day"
Ср 09 ноя 2022 14:27:08 EET
oleg@mobile:~:$
oleg@mobile:~:$ date --date="tomorrow"
Пн 07 ноя 2022 14:25:57 EET
oleg@mobile:~:$
Переопределение часового пояса
По умолчанию команда date использует часовой пояс, определенный в /etc/localtime
. Для использования другого часового пояса установите переменную TZ
в желаемый часовой пояс.
Можно, например, установить в системе нью-йоркское время:
oleg@mobile:~:$ TZ='America/New_York' date
Увидеть все доступные часовые пояса позволит следующая команда:
oleg@mobile:~:$ timedatectl list-timezones list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Juba
Africa/Kampala
Africa/Khartoum
Africa/Kigali
Africa/Kinshasa
Africa/Lagos
Africa/Libreville
Africa/Lome
Africa/Luanda
Africa/Lubumbashi
Africa/Lusaka
Africa/Malabo
lines 1-38
Использование date вместе с другими командами
Вы можете использовать команду date
для создания имен файлов, содержащих текущее время и дату.
В Linux команда date
с успехом используется в скриптах. Я, например, использую её для автоматического создания резервных копий баз данных.
Содержимое моего файла linuxcookbookru_dump.sh
:
oleg@mobile:~/www/backuplinode:$ cat linuxcookbookru_dump.sh
#!/bin/bash
date=%%
cd /home/mensh/www/backup && \
mysqldump --opt -umensh -pPASSWORD \
linuxcookbookru > linuxcookbookru_linode_`date '+%Y%m%d'`.sql && \
tar cjvf linuxcookbookru_linode_`date '+%Y%m%d'`.sql.bz2 linuxcookbookru_linode_`date '+%Y%m%d'`.sql && \
rm linuxcookbookru_linode_`date '+%Y%m%d'`.sql
Выводы
В этой статье я изложил основные приёмы использования в Linux команды date
. Теперь вы наверняка понимаете насколько полезна эта команда.