получить конец дня в командном скрипте bash - PullRequest
0 голосов
/ 22 мая 2018

Я хочу получить конец дня в bash.

Например:

date +%s

Приведенная выше команда задает текущую эпоху.

Я хочу конец дняэпоха текущей даты.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Используя BSD date, вы можете использовать -v для правильной настройки времени.

% date
Tue May 22 09:21:50 EDT 2018
% date  -v 23H -v 59M -v 59S
Tue May 22 23:59:59 EDT 2018

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

% date -v +1d -v 0H -v 0M -v -0S -v -1S
          ^      ^     ^      ^     ^
          |      |     |      |     |
          |      +-----+------+     subtract one second
          |            |
          |        reset to midnight
          |
          go to tomorrow

(Обидно -v не может взять комбинацию. date -v+1d0H0MS-1S было бы неплохо напечатать.не очень читабельный или очевидный, но его легко разобрать, если вы знаете, как работает -v. Пробелы могут сделать его лучше: date -v "+1d 0H 0M 0S -1S". # wishfulthinking)


Простой, но хрупкий подход заключается в том, чтобы просто округлитьс точностью до ближайшего кратного 86400:

$ now=$(date +%s)
$ end_of_day=$(( now - now%86400 + 86399))

, но это не учитывает переход на летнее время в течение двух дней, когда это может иметь значение.

0 голосов
/ 22 мая 2018

Вы можете просто указать это с помощью аргумента -d.

т.е. date -d "today 23:59:59" +%s, где сегодня 23:29:59 используется для получения конца текущего дня

Edit : @ Toby предлагает следующий подход для правильной обработки високосных секунд -d 'tomorrow 0 -1second

Если вы хотите, чтобы начало дня использовалось

date -d "today 0" +%s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...