Linux часы минуты секунды

Команда date в Linux

В этом руководстве мы рассмотрим основы команды date .

Команда date отображает или устанавливает системную дату. Чаще всего он используется для печати даты и времени в различных форматах и вычисления будущих и прошлых дат.

Использование команды date в Linux

Синтаксис команды date следующий:

Чтобы отобразить текущее системное время и дату с использованием форматирования по умолчанию, вызовите команду без каких-либо параметров и аргументов:

Вывод включает день недели, месяц, день месяца, время, часовой пояс и год:

Sat Jun 1 14:31:01 CEST 2019 

Параметры форматирования даты

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

date +"Year: %Y, Month: %m, Day: %d"

Символ %Y будет заменен годом, %m месяцем, а %d — днем месяца:

Year: 2019, Month: 06, Day: 02 

Ниже приведен небольшой список некоторых наиболее распространенных символов форматирования:

  • %a — сокращенное короткое название дня недели для локали (например, Mon)
  • %A — сокращенное полное название дня недели (например, понедельник).
  • %b — сокращенное краткое название месяца локали (например, январь)
  • %B — сокращенное длинное название месяца локали (например, январь)
  • %d — День месяца (например, 01)
  • %H — час (00..23)
  • %I — Час (01..12)
  • %j — День года (001..366)
  • %m — Месяц (01..12)
  • %M — Минута (00..59)
  • %S — Секунда (00..60)
  • %u — День недели (1..7)
  • %Y — полный год (например, 2019)

Чтобы получить полный список всех параметров форматирования, запустите в терминале date —help или man date .

Строка даты

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

Sun Feb 7 12:10:53 CET 2010 

Используя произвольное форматирование:

date -d '16 Dec 1974' +'%A, %d %B %Y'

Строка даты принимает такие значения, как «завтра», «пятница», «последняя пятница», «следующая пятница», «следующий месяц», «следующая неделя» и т. Д.

Sat May 25 14:31:42 CEST 2019 

Вы также можете использовать опцию строки даты, чтобы показать местное время для разных часовых поясов. Например, чтобы показать местное время на 6:30 утра следующего понедельника на восточном побережье Австралии, введите:

date -d 'TZ="Australia/Sydney" 06:30 next Monday'
Sun Jun 2 22:30:00 CEST 2019

Отменить часовой пояс

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

Например, чтобы показать время Мельбурна, австралийское время, введите:

TZ='Australia/Melbourne' date
Sat Jun 1 22:35:10 AEST 2019 

Чтобы /usr/share/zoneinfo список всех доступных часовых поясов , вы можете либо перечислить файлы в каталоге /usr/share/zoneinfo либо использовать команду timedatectl list-timezones .

Конвертер эпохи

Команду date можно использовать как конвертер эпохи. Эпоха или временные метки Unix — это количество секунд, прошедших с 1 января 1970 года в 00:00:00 UTC.

Чтобы напечатать количество секунд от эпохи до текущего дня, вызовите date с помощью элемента управления форматом %s :

Читайте также:  Пропал звук kali linux

Чтобы преобразовать секунды с начала эпохи до даты, установите секунды как строку даты с префиксом @ :

Sat Feb 14 00:31:30 CET 2009 

Использование date с другими командами

Команда date наиболее часто используется для создания имен файлов , содержащих текущее время и дату.

Приведенная ниже команда создаст файл резервной копии Mysql в следующем формате database_name-20190601.sql

mysqldump database_name > database_name-$(date +%Y%m%d).sql

Вы также можете использовать команду date в сценариях оболочки. В приведенном ниже примере мы назначаем вывод date переменной date_now :

date_now=$(date "+%F-%H-%M-%S") echo $date_now 

Отображение времени последнего изменения файла

Команда date с параметром -r показывает время последней модификации файла. Например:

Tue Jul 24 11:11:48 CEST 2018 

Если вы хотите изменить временную метку файла, используйте touch команду .

Установите системное время и дату

Установка системного времени и даты вручную с помощью команды date не рекомендуется, поскольку в большинстве дистрибутивов Linux системные часы синхронизируются с помощью служб ntp или systemd-timesyncd .

Однако, если вы хотите установить системные часы вручную, вы можете использовать параметр —set= . Например, если вы хотите установить дату и время на 17:30 1 июня 2019 г., введите:

Выводы

Команда Linux date отображает или устанавливает системные дату и время.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Команда date в Linux

Главное свойство утилит GNU/Linux — делать что-то одно, но эффективно. Яркий пример — команда date Linux, работающая с датой и временем. С её помощью можно извлекать любую дату в разнообразном формате, в том числе и рассчитывать прошлое и будущее время. Привилегированные пользователи могут перезаписывать системное время, используя её.

Утилита предустановлена во всех дистрибутивах GNU/Linux. В этой статье будут рассмотрены возможности date и способы применения этой команды.

Синтаксис команды date

Программа может выполнятся от имени обычного пользователя. Стандартный синтаксис команды (квадратные скобки обозначают необязательное наличие):

date [ ОПЦИИ ] . [ +ФОРМАТ ]

Ниже представлена таблица с часто применяемыми опциями для date.

Опция Длинный вариант Значение
-d STRING —date=STRING Вывод даты по указанной строке (например ‘yesterday’, ‘tomorrow’, ‘last monday’).
-I —iso-8601[=FMT] Вывод даты в формате ISO 8601. FMT по умолчанию содержит ‘date’. Также может содержать ‘hourse’, ‘minutes’, ‘seconds’, ‘ns’ для отображения соответствующих значений и часовой пояс относительно UTC рядом с датой.
—rfc-3339=FMT Вывод даты в формате RFC 3339. FMT по умолчанию содержит ‘date’. Также может содержать ‘seconds’ и ‘ns’ для отображения секунд или наносекунд.
-r FILE —reference=FILE Вывод даты последней модификации указанного файла в формате по умолчанию.
-u —utc Вывод UTC-даты

Аргумент ФОРМАТ отвечает за форматирование вывода даты. Для его указания необходимо поставить знак «+» и написать нужную маску. Наиболее популярные форматы:

Формат Значение
%% Знак процента
%a День недели текущей локали в короткой форме («Чтв»)
%A День недели текущей локали в длинной форме («Четверг»)
%b Месяц года текущей локали в короткой форме в родительном падеже («янв»)
%B Месяц года текущей локали в длинной форме в родительном падеже («января»)
%c Дата и время текущей локали без указания часового пояса
Первые две цифры текущего года
%d Числовой день месяца с ведущим нулём
%D Дата в формате %m/%d/%y
%e День месяца; аналог %_d
%F Дата в формате %Y-%m-%d
%h Аналог %b
%H Часы (00..23)
%I Часы (01..12)
%j День года (001..366)
%m Месяц (01..12)
%M Минуты (00..59)
%n Новая строка
%q Квартал года
%S Секунды (00..59)
%t Знак табуляции
%T Время в формате %H:%M:%S
%u Числовой день недели; 1 — понедельник
%x Дата в локальном формате
%X Время в локальном формате
%Z Аббревиатура временной зоны
Читайте также:  Как изменить размер изображения linux

Примеры использования date

Введем команду без параметров.

Будет отображена текущая дата и время в соответствии с настройками локали системы.

Команда date

Команда date без параметров по умолчанию применяет маску %a %b %d %X %Z. Поскольку все форматы должны быть переданы как один параметр (из-за принципа обработки данных командным интерпретатором Bash), пробелы между ними необходимо экранировать обратным слэшем (\) или взять в кавычки.

Особое внимание следует уделить параметру -d (—date). Его функциональность не слишком очевидна, но при этом наиболее обширна.

Пример 1. Вычисление даты по числу секунд, прошедших с 1 января 1970 года.

Вычисление даты по количеству секунд

Пример 2. Вычисление даты и времени следующего понедельника при указании часового пояса Нью-Йорка в 03:00.

date —date=’TZ=»America/New_York» 03:00 next mon’

Вычисление даты с указанием временной зоны

Обратите внимание: указывать название дня недели или месяца можно в любом регистре, в короткой или длинной форме. Параметры next и last обозначают следующий и прошедший, соответственно, ближайшие дни недели.

Пример 3. Если текущий день месяца — последний, сформировать отчет о занятости дискового пространства корневого и домашнего каталога в файл report.

#!/bin/bash
if [[ $(date —date=’next day’ +%d) = ’01’ ]]; then
df -h / /home > report

Такой скрипт можно использовать для автоматизации работы с помощью демона crontab или anacron.

Выводы

Команда date Linux является эффективным инструментом работы с датой и временем, с широкой возможностью их расчёта для прошедших или будущих показателей. Также она применяется в написании сценариев в командном интерпретаторе Bash.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Displaying seconds as days/hours/mins/seconds?

Is it possible to easily format seconds as a human-readable time in bash? I don’t want to format it as a date, but as the number of days/hours/minutes, etc.

11 Answers 11

You can use something like this:

function displaytime < local T=$1 local D=$((T/60/60/24)) local H=$((T/60/60%24)) local M=$((T/60%60)) local S=$((T%60)) (( $D >0 )) && printf '%d days ' $D (( $H > 0 )) && printf '%d hours ' $H (( $M > 0 )) && printf '%d minutes ' $M (( $D > 0 || $H > 0 || $M > 0 )) && printf 'and ' printf '%d seconds\n' $S > 
$ displaytime 11617 3 hours 13 minutes and 37 seconds $ displaytime 42 42 seconds $ displaytime 666 11 minutes and 6 seconds 

This is really nice — the only thing it’s missing is dropping the -s from singular day(s), hour(s), minute(s) and second(s).

Easiest and cleanest way is this one liner (here assuming GNU date ):

If the number of seconds is, say:

seconds=123456789 # as in one of the answers above date -ud "@$seconds" +"$(( $seconds/3600/24 )) days %H hours %M minutes %S seconds" 

—> output: 1428 days 21 hours 33 minutes 09 seconds

If your duration will always be less than a day you can use +%T format for Hours:Minutes:Seconds for this date +%T «1970-01-01 + $ seconds» to get 21:33:09

Читайте также:  Open source linux operating systems

Credit goes to Stéphane Gimenez but if someone would like to display seconds only if a period is less than a minute here is my modified version that I use (also with fixed pluralization):

converts() < local t=$1 local d=$((t/60/60/24)) local h=$((t/60/60%24)) local m=$((t/60%60)) local s=$((t%60)) if [[ $d >0 ]]; then [[ $d = 1 ]] && echo -n "$d day " || echo -n "$d days " fi if [[ $h > 0 ]]; then [[ $h = 1 ]] && echo -n "$h hour " || echo -n "$h hours " fi if [[ $m > 0 ]]; then [[ $m = 1 ]] && echo -n "$m minute " || echo -n "$m minutes " fi if [[ $d = 0 && $h = 0 && $m = 0 ]]; then [[ $s = 1 ]] && echo -n "$s second" || echo -n "$s seconds" fi echo > 

An alternative example in POSIX:

This worked really well. I simply pasted the function into my script and ran convert $s to get pretty output.

$ seconds=123456789; echo $((seconds/86400))" days "$(date -d "1970-01-01 + $seconds seconds" "+%H hours %M minutes %S seconds") 1428 days 21 hours 33 minutes 09 seconds $ 

Here’s the one liner above, broken down so that it’s easier to understand:

$ seconds=123456789 $ echo $((seconds/86400))" days"\ $(date -d "1970-01-01 + $seconds seconds" "+%H hours %M minutes %S seconds") 

In the above I’m echoing out the output of another command that’s run inside the $( . ) sub-command. That sub-command is doing this, calculating the number of days (seconds/86400), then using the date command in another sub-command $(date -d . ) , to generate the hours, minutes, and seconds for a given number of seconds.

I modified the displaytime function above. as follows:

seconds2time () < T=$1 D=$((T/60/60/24)) H=$((T/60/60%24)) M=$((T/60%60)) S=$((T%60)) if [[ $!= 0 ]] then printf '%d days %02d:%02d:%02d' $D $H $M $S else printf '%02d:%02d:%02d' $H $M $S fi > 

because I always want to see HH:MM:SS, even if they are zeros.

I’m building on atti’s answer which I liked as an idea.

You can do this with the bash builtin printf which will take the seconds since the epoch as an argument. No need to fork to run date .

You have to set the timezone to UTC for printf because it formats the time in your local timezone and you will get the wrong answer if you are not in UTC time.

$ seconds=123456789 $ TZ=UTC printf "%d days %(%H hours %M minutes %S seconds)T\n" $((seconds/86400)) $seconds 1428 days 21 hours 33 minutes 09 seconds 

In my local time (which is currently NZDT — +1300) the answer is wrong if I do not set the timezone

$ seconds=123456789 $ printf "%d days %(%H hours %M minutes %S seconds)T\n" $((seconds/86400)) $seconds 1428 days 09 hours 33 minutes 09 seconds 

With and without setting the timezone

$ seconds=$(( 3600 * 25)) $ printf "%d days %(%H hours %M minutes %S seconds)T\n" $((seconds/86400)) $seconds 1 days 13 hours 00 minutes 00 seconds $ TZ=UTC printf "%d days %(%H hours %M minutes %S seconds)T\n" $((seconds/86400)) $seconds 1 days 01 hours 00 minutes 00 seconds 

Источник

Оцените статью
Adblock
detector