команда date в сценарии оболочки bash - PullRequest
0 голосов
/ 10 января 2012

На работе все дни конфигурационные файлы генерируются свежими и с добавлением номера сеанса. компания стала публичной на Feb 16, а 86400 составляет секунд за один день . номер сеанса генерируется путем вычитания начального дня компании из seconds_since_last_day и добавления нескольких нулей

, которые являются ключом для взаимодействия с файлами конфигурации дней.Я получаю это - однако я не понимаю

date -ud "$distance days ago 00:00:00".

Это количество секунд с 1970 года?

if $session; then
        # return the session of the last day
        seconds_since_day_one=`date -ud "Feb 16 2002" +"%s"`
        seconds_since_last_day=`date -ud "$distance days ago 00:00:00" +"%s"`
        days_between=`printf "%010d" $(( (seconds_since_last_day -  seconds_since_day_one) / 86400 ))`
        # Truncate on the left to 9 bytes to leave room
        # to append the engine suffix for your environment
        echo $days_between | awk '{l=length($1); print substr( $1, (l-8), l )}'

Ответы [ 3 ]

2 голосов
/ 10 января 2012

date -ud "$distance days ago 00:00:00" само по себе просто печатает дату определенное количество дней назад в вполне читаемом формате, но когда вы добавляете строку FORMAT для управления выводом +"%s" действительно означает число в так называемом Unix Time (число секунд с 1970-01-01 00:00:00 UTC).

Если переменная $distance установлена ​​в число, оно показывает дату того числа дней назад, если ее значение равно 0, это означает сегодня, 1 - вчера, 2 - позавчера, и так далее. Чтобы лучше понять эти форматы и относительные ключевые слова, в пакете GNU coreutils есть (среди прочего) хорошая документация.

Проверьте эти URL:
http://www.gnu.org/software/coreutils/manual/html_node/Relative-items-in-date-strings.html#Relative-items-in-date-strings
http://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html
http://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html#date-invocation

Объяснение Википедии о Unix Time:
http://en.wikipedia.org/wiki/Unix_time

0 голосов
/ 10 января 2012

mktime и strftime в awk могут использоваться для получения даты времени. http://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html

Например, strftime ("% A", mktime ("ГГГГ ММ ДД 00 00 00")) должен дать вам день.

0 голосов
/ 10 января 2012

Опция от -d до date предоставляет общую строку для получения даты.

Так, например, date -d yesterday будет печатать вчерашнюю дату, а date -d 'yesterday 12:00 AM' будет печатать вчерашнюю дату со временемустановите на 00:00.

Итак, date -d 6 days ago 00:00:00 напечатает дату 6 дней назад, а время будет 00:00:00.Я надеюсь, что он отвечает на ваш вопрос.

Формат + "% s" указывает date печатать количество секунд с 1970 года вместо даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...