在 UNIX 外壳脚本中减去 1 小时的日期



我在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"

相关内容

  • 没有找到相关文章

最新更新