在 UNIX shell 脚本中从日期减去 1 小时

发布于 2024-11-06 13:03:54 字数 102 浏览 1 评论 0原文

我在 shell 脚本中有以下内容。如何在保留格式的情况下减去一小时?

DATE=`date "+%m/%d/%Y -%H:%M:%S"`

I have the following in a shell script. How can I subtract one hour while retaining the formatting?

DATE=`date "+%m/%d/%Y -%H:%M:%S"`

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

忆沫 2024-11-13 13:03:54

以下命令适用于最新版本的 GNU date

date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S"

The following command works on recent versions of GNU date:

date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S"
怎樣才叫好 2024-11-13 13:03:54
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-aritmetics - 以秒为单位减去 1 小时。印刷:

current date: 04/20/2017 -18:14:31
date - 60min: 04/20/2017 -17:14:31
date -v-60M "+%m/%d/%Y -%H:%M:%S"

DATE=`date -v-60M "+%m/%d/%Y -%H:%M:%S"`

If you have bash version 4.4+ you can use bash's internal date printing and arithmetics:

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 ))

The $(printf "%(%s)T") prints the epoch seconds, the $(( epoch - 60*60 )) is bash-aritmetics - subtracting 1hour in seconds. Prints:

current date: 04/20/2017 -18:14:31
date - 60min: 04/20/2017 -17:14:31
忆梦 2024-11-13 13:03:54

如果您需要用时间戳减去:

timestamp=$(date +%s -d '1 hour ago');

if you need substract with timestamp :

timestamp=$(date +%s -d '1 hour ago');
堇色安年 2024-11-13 13:03:54
$ 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 >

$ date +%Y-%m-%d-%H 
2019-04-09-20

$ date -v-1H +%Y-%m-%d-%H 
2019-04-09-19

But in shell use as like date +%Y-%m-%d-%H, date -v-1H +%Y-%m-%d-%H

请爱~陌生人 2024-11-13 13:03:54

这适用于我的 Ubuntu 16.04 date
<代码>
日期 --date="@$(($(日期 +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S"

date 版本是 date (GNU coreutils) 8.25

This work on my Ubuntu 16.04 date:

date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S"

And the date version is date (GNU coreutils) 8.25

吹泡泡o 2024-11-13 13:03:54

如果您也需要在使用新格式进行减法之前更改时区:

$(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M')

If you need change timezone before subtraction with new format too:

$(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M')
黯然 2024-11-13 13:03:54

转换为时间戳(长整数),减去正确的毫秒数,重新格式化为您需要的格式。

由于您没有指定编程语言,因此很难提供更多详细信息......

Convert to timestamp (a long integer), subtract the right number of milliseconds, reformat to the format you need.

Hard to give more details since you don't specify a programming language...

时光清浅 2024-11-13 13:03:54

这里还有另一种减去1小时的方法。

yesterdayDate=`date -d '2018-11-24 00:09 -1 hour' +'%Y-%m-%d %H:%M'` 
echo $yesterdayDate

Output:
2018-11-23 23:09

我希望它可以帮助某人。

Here another way to subtract 1 hour.

yesterdayDate=`date -d '2018-11-24 00:09 -1 hour' +'%Y-%m-%d %H:%M'` 
echo $yesterdayDate

Output:
2018-11-23 23:09

I hope that it can help someone.

酒绊 2024-11-13 13:03:54
DATE=date -1H "+%m/%d/%Y -%H:%M:%S"
DATE=date -1H "+%m/%d/%Y -%H:%M:%S"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文