Используя 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))
, но это не учитывает переход на летнее время в течение двух дней, когда это может иметь значение.