我在shell脚本中有以下内容。 如何在保留格式的同时减去一小时?
DATE=`date "+%m/%d/%Y -%H:%M:%S"`
以下命令适用于最新版本的 GNU date
:
date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S"
date -v-60M "+%m/%d/%Y -%H:%M:%S"
DATE=`date -v-60M "+%m/%d/%Y -%H:%M:%S"`
如果你有bash版本4.4+
你可以使用bash的内部日期打印和算术:
printf "current date: %(%m/%d/%Y -%H:%M:%S)Tn"
printf "date - 60min: %(%m/%d/%Y -%H:%M:%S)Tn" $(( $(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
时间戳减法:
timestamp=$(date +%s -d '1 hour ago');
$ 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
这项工作在我的 Ubuntu 16.04 date
:
date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S"
而且date
版本是date (GNU coreutils) 8.25
如果您还需要在使用新格式减法之前更改时区:
$(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M')
转换为时间戳(长整数),减去正确的毫秒数,重新格式化为所需的格式。
很难提供更多详细信息,因为您没有指定编程语言......
这是减去 1 小时的另一种方法。
yesterdayDate=`date -d '2018-11-24 00:09 -1 hour' +'%Y-%m-%d %H:%M'`
echo $yesterdayDate
Output:
2018-11-23 23:09
我希望它可以帮助某人。
DATE=date -1H "+%m/%d/%Y -%H:%M:%S"