26

在linux下,date可以帮我打印当前时间。如果要打印当前时间 + 1 小时,我应该给出什么选项?

4

8 回答 8

63

在 Linux 上

只需使用-d(或--date) 对日期进行一些数学运算:

date -d '+1 hour' '+%F %T'
#    ^^^^^^^^^^^^

例如:

$ date '+%F %T'
2013-04-22 10:57:24
$ date -d '+1 hour' '+%F %T'
2013-04-22 11:57:24
#           ^

在 Mac 操作系统上

警告,以上仅适用于 Linux,不适用于 Mac OS。

在 Mac OS 上,等效的命令是

date -v+1H
于 2013-04-22T08:57:12.180 回答
11

在 shell 脚本中,如果我们需要添加时间,请使用以下命令和日期格式(将时间放在日期字符串之前)

date -d"11:15:10 2017-02-05 +2 hours" +"%Y-%m-%d %H:%M:%S" 这将输出 2017-02-05 13:15:10

这不会导致没有 UTC 的正确日期它不起作用

于 2018-02-05T18:38:05.100 回答
3

Linux 和 macOS 在一个命令中

如果您需要编写可在 Linux 服务器和 macOS 工作站上运行的脚本,您可以将第一次date调用的错误静音并与另一个调用“或”( ||)。哪个先来并不重要。

date -u -d "+${max_age}Seconds" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || \
date -u -v "+${max_age}S"       +"%Y-%m-%dT%H:%M:%SZ"

例如,此 bash 函数将文件上传到 AWS S3 并设置 aExpires:Cache-Control:headers。

s3_upload_cache_control(){
  local max_age_seconds="${1}" ;shift         # required
  local bucket_path="${1}"     ;shift         # required
  local filename="${1}"        ;shift         # required
  local remote_filename="/${1:-${filename}}"  # optional
  local fmt="+%Y-%m-%dT%H:%M:%SZ"
  aws s3 cp                                                          \
    "${filename}"                                                    \
    "s3://${bucket_path}${remote_filename}"                          \
    --expires                                                  "$(   \
      date -u -d "+${max_age_seconds}Seconds" $fmt 2>/dev/null  ||   \
      date -u -v "+${max_age_seconds}S"       $fmt               )"  \
    --cache-control max-age=$max_age,public                          \
    --acl public-read
}

于 2020-03-20T01:42:52.593 回答
3

对我来说,添加加号+只是让它认为我想使用时区。

所以

date -d "2021-03-16 00:00:00 +3 minutes" +'%H:%M'

回来23:01了,这很奇怪..

但我省略了加号,只是这样做:

date -d "2021-03-16 00:00:00 1 hour" +'%H:%M'

然后返回01:00

于 2021-03-30T09:02:25.333 回答
2

根据这个来源,你可以这样做:

日期 --date='1 小时'

于 2013-04-22T08:57:22.903 回答
0

TZ=Asia/Calcutta date应该工作(显然这会让你在加尔各答的时间)。

这只会更改TZ此操作的 TimeZone ( ) 环境变量,它不会将您永久设置为您指定的新时区。

于 2013-04-22T08:56:27.687 回答
0

我们可以使用下面的代码来获取它,我正在处理一个案例,其中我需要遍历过去 3 个月的日期,我使用下面的代码来遍历相同的

!/bin/sh

for i in {90..1}
  do
   st_dt=$(date +%F' 00:00:00'  -d "-$i days")
   echo $st_dt
   j=$((i-1))
   end_dt=$(date +%F' 00:00:00'  -d "-$j days")
   echo $end_dt
  done
于 2017-11-16T06:56:22.763 回答
0

在 Linux shell 脚本中添加 1 小时或 60 分钟。

dt=$(date -d '+ 60 minutes'  '+%FT%T.000Z')
于 2020-06-26T07:56:10.970 回答