【问题标题】:Add some specific time while using the linux command "date"在使用 linux 命令“date”时添加一些特定时间
【发布时间】:2013-04-22 08:52:35
【问题描述】:

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

【问题讨论】:

  • 如果您尝试进行时区校正,请查看TZ 环境变量并将日期存储为UTC!
  • 我只想获取当前时间和 1 小时后作为我另一个代码的输入,谢谢。

标签: linux date


【解决方案1】:

在 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

【讨论】:

  • 我们还可以将时间添加到给定日期,如下所示: $ date -d "May 16 10:41:56 EDT 2017 + 12360.471 seconds" Tue May 16 14:07:56 EDT 2017
【解决方案2】:

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

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

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

【讨论】:

    【解决方案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 并设置 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
    }
    
    

    【讨论】:

      【解决方案4】:

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

      所以

      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

      【讨论】:

        【解决方案5】:

        根据source,您可以这样做:

        date --date='1 小时'

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • 咳嗽!虽然我要询问时区,但硬编码它以匹配您的偶然的本地时区......很可能不是 OP 需要做的。
          • 这不会永久更改任何内容@sehe,它只是更改单个操作范围的变量。如果他想要Europe/LondonAmerica/Chicago,他可以直接替换它们。
          • 很抱歉,这是错误的。它似乎在大多数情况下都有效,但在某些时候它失败。例如,当目的地 TZ 已切换到夏令时,而您的却没有。
          • @Oshawott 我知道是对的,这是关于不解释使用什么魔法来到达时区。看我的comment at the OP,真的
          【解决方案7】:

          我们可以使用下面的代码来获取它,我正在处理一个我需要遍历过去 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
          

          【讨论】:

            【解决方案8】:

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

            dt=$(date -d '+ 60 minutes'  '+%FT%T.000Z')
            

            【讨论】:

              猜你喜欢
              • 2016-12-16
              • 1970-01-01
              • 2017-02-28
              • 2011-08-09
              • 2012-07-17
              • 1970-01-01
              • 1970-01-01
              • 2017-08-29
              • 1970-01-01
              相关资源
              最近更新 更多