使用linux命令"date"时添加一些特定时间

wai*_*kuo 8 linux date

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

fed*_*qui 32

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

date -d '+1 hour' '+%F %T'
#    ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

例如:

$ date '+%F %T'
2013-04-22 10:57:24
$ date -d '+1 hour' '+%F %T'
2013-04-22 11:57:24
#           ^
Run Code Online (Sandbox Code Playgroud)


Sak*_*vel 10

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

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

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


Bru*_*sky 6

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"

Run Code Online (Sandbox Code Playgroud)

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

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
}

Run Code Online (Sandbox Code Playgroud)


ufk*_*ufk 6

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

所以

date -d "2021-03-16 00:00:00 +3 minutes" +'%H:%M'
Run Code Online (Sandbox Code Playgroud)

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

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

date -d "2021-03-16 00:00:00 1 hour" +'%H:%M'
Run Code Online (Sandbox Code Playgroud)

然后返回01:00.