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

时间:2011-05-09 08:26:37

标签: shell datetime unix

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

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

8 个答案:

答案 0 :(得分:52)

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

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

答案 1 :(得分:8)

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

这项工作在我的Ubuntu 16.04 date上: date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S" date版本为date (GNU coreutils) 8.25

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

这是另一种减去1小时的方法。

 [HttpPost]
 [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(int id,[Bind("IDPost,Title,Image,Content,IDUser,DateCreated")] Post post)
    {
        if (id != post.IDPost)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            //do some stuff
        }
        return View(post);
    }

我希望它可以帮助某人。 最好的问候!

答案 7 :(得分:0)

$日期+%Y-%m-%d-%H 输出:2019-04-09-20

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

但是在shell中的用法类似于date +%Y-%m-%d-%Hdate -v-1H +%Y-%m-%d-%H