我在一个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)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算术运算,表示减去1小时的秒数。输出结果为:
current date: 04/20/2017 -18:14:31
date - 60min: 04/20/2017 -17:14:31
date
功能。 - tripleee-u
。这可能仍然不是完全可移植的,但这是一个合理的基准。我并不是说你必须想出一个解决方案,只是指出一个事实,这可能会让尝试使用你的答案中的信息的访问者感到惊讶。 - tripleee如果你需要对时间戳进行减法计算:
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
但是在shell中的使用方式就像这样 date +%Y-%m-%d-%H
, date -v-1H +%Y-%m-%d-%H
-v
选项与 BSD 的 date
命令相似(在 macOS 上也是这样),而不是 GNU 的 date
。 - tripleee$(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M')
date
功能。 - tripleee这段命令适用于我的Ubuntu 16.04操作系统,date
命令如下所示:
date --date="@$(($(date +%s) - 3600))" "+%Y/%m/%d -%H:%M:%S"
其中的date
版本为date (GNU coreutils) 8.25
date
功能。 - tripleee将其转换为时间戳(一个长整数),减去正确的毫秒数,重新格式化为所需的格式。
由于您没有指定编程语言,因此很难提供更多细节......
date "+%m/%d/%Y -%H:%M:%S"
,我想从DATE中减去1小时。 - shamir chaikin还有另一种减少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
功能。 - tripleeeDATE=date -1H "+%m/%d/%Y -%H:%M:%S"