Вычесть 1 час с даты в оболочке unix script У меня есть следующее в оболочке script. Как я могу вычитать один час, сохраняя форматирование? DATE=`date "+%m/%d/%Y -%H:%M:%S"` Ответ 1 Следующая команда работает с последними версиями GNU date: date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S" Ответ 2 date -v-60M "+%m/%d/%Y -%H:%M:%S" DATE=`date -v-60M "+%m/%d/%Y -%H:%M:%S"` Если у вас есть bash version 4.4+, вы можете использовать bash печать даты и арифметики: printf "current date: %(%m/%d/%Y -%H:%M:%S)T\n" printf "date - 60min: %(%m/%d/%Y -%H:%M:%S)T\n" $(( $(printf "%(%s)T") - 60 * 60 )) $(printf "%(%s)T") печатает секунды эпохи, $(( epoch - 60*60 )) - bash -aritmetics - вычитает 1 час в секундах. Печать: current date: 04/20/2017 -18:14:31 date - 60min: 04/20/2017 -17:14:31 Ответ 3 если вам нужна выдержка с меткой времени: timestamp=$(date +%s -d '1 hour ago'); Ответ 4 Преобразовать в timestamp (длинное целое число), вычесть правильное количество миллисекунд, переформатировать в нужный формат. Сложно дать больше информации, так как вы не указали язык программирования... Ответ 5 Эта работа над моим Ubuntu 16.04 date: date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S" И date версия date (GNU coreutils) 8.25 Ответ 6 Если вам нужно изменить часовой пояс до вычитания с новым форматом тоже: $(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M') Ответ 7 Здесь еще один способ вычесть 1 час. yesterdayDate='date -d '2018-11-24 00:09 -1 hour' +'%Y-%m-%d %H:%M'' echo $yesterdayDate Output: 2018-11-23 23:09 Я надеюсь, что это может помочь кому-то. С уважением! Ответ 8 $ date +% Y-% m -% d-% H Выход: 2019-04-09-20 $ date -v-1H +% Y-% m -% d-% H Выход: 2019-04-09-19 Но в скорлупе используйте как date +%Y-%m-%d-%H, date -v-1H +%Y-%m-%d-%H
Ответ 1 Следующая команда работает с последними версиями GNU date: date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S"
Ответ 2 date -v-60M "+%m/%d/%Y -%H:%M:%S" DATE=`date -v-60M "+%m/%d/%Y -%H:%M:%S"` Если у вас есть bash version 4.4+, вы можете использовать bash печать даты и арифметики: printf "current date: %(%m/%d/%Y -%H:%M:%S)T\n" printf "date - 60min: %(%m/%d/%Y -%H:%M:%S)T\n" $(( $(printf "%(%s)T") - 60 * 60 )) $(printf "%(%s)T") печатает секунды эпохи, $(( epoch - 60*60 )) - bash -aritmetics - вычитает 1 час в секундах. Печать: current date: 04/20/2017 -18:14:31 date - 60min: 04/20/2017 -17:14:31
Ответ 4 Преобразовать в timestamp (длинное целое число), вычесть правильное количество миллисекунд, переформатировать в нужный формат. Сложно дать больше информации, так как вы не указали язык программирования...
Ответ 5 Эта работа над моим Ubuntu 16.04 date: date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S" И date версия date (GNU coreutils) 8.25
Ответ 6 Если вам нужно изменить часовой пояс до вычитания с новым форматом тоже: $(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M')
Ответ 7 Здесь еще один способ вычесть 1 час. yesterdayDate='date -d '2018-11-24 00:09 -1 hour' +'%Y-%m-%d %H:%M'' echo $yesterdayDate Output: 2018-11-23 23:09 Я надеюсь, что это может помочь кому-то. С уважением!
Ответ 8 $ date +% Y-% m -% d-% H Выход: 2019-04-09-20 $ date -v-1H +% Y-% m -% d-% H Выход: 2019-04-09-19 Но в скорлупе используйте как date +%Y-%m-%d-%H, date -v-1H +%Y-%m-%d-%H