我在shell脚本中有以下内容。如何在保留格式的同时减去一小时?
DATE=`date "+%m/%d/%Y -%H:%M:%S"`
答案 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-%H
,date -v-1H +%Y-%m-%d-%H