【问题标题】:Convert UTC time to GMT bash script将 UTC 时间转换为 GMT bash 脚本
【发布时间】:2015-11-09 13:59:12
【问题描述】:

我正在尝试在我的小脚本中将 UTC 时间转换为 GMT 时间,但它不起作用:

TimestampUTC=$(date +"%s")
echo $TimestampUTC
dates=$(date -d @$TimestampUTC)
echo $dates

## 2 hours difference between UTC and GMT
Hours2=120

TimestampGMT=$((TimestampUTC - Hours2))
echo $TimestampGMT

diff=$((TimestampUTC - TimestampGMT))
echo $diff

dateGMT=$(date -d @$TimestampGMT)
echo $dateGMT

$dateGMT 的显示结果与$dates 相同。

提前致谢。

【问题讨论】:

  • 显示的结果不一样。查看echo $datesecho $dateGMT 显示的分钟数,它们会相差2 分钟或120 秒。如果您在 UTC 和 GMT 之间有 2 小时的差异,则使 Hours2 等于 2*60*60,因为您需要在几秒钟内而不是几分钟内编写它。
  • 哦,没错,UTC 是 2015 年 8 月 17 日星期一 09:18:20 AST 2015,格林威治标准时间是:2015 年 8 月 17 日星期一 07:18:20 AST,谢谢伙计

标签: bash shell date data-conversion


【解决方案1】:

脚本错误。

Unix 时间戳以秒为单位。

Hours2=120 表示 120 秒。

所以你的 2 个时间间隔相差 2 分钟,而不是 2 小时。

这段代码是正确的:

Hours2=7200

您还声称 GMT 和 UTC 之间有 2 小时,我确定您的意思是 CET(中欧时间)

注意:没有什么能比得上 CET 时间戳。它只是带有时区偏移量的普通 unix 时间戳。因此,与世界位置无关,unix 时间戳在全球范围内始终是相同的。

你可以用这个替换你所有的代码

# get the timestamp 2 hours in the future from now
date2h=$(date -d "2 hours" +%s)

这会为您提供未来的 unix 时间戳。它不是 CET 中的当前时间戳。当前 CET 时间戳始终与 UTC 相同。

如何从 UTC 和 CET 获取时间?在命令前设置环境变量 TZ。

$ TZ=UTC date
Mon Aug 17 11:44:05 UTC 2015
$ TZ=CET date
Mon Aug 17 13:44:05 CEST 2015
$ TZ=GMT date
Mon Aug 17 11:44:05 GMT 2015

但时间戳总是一样的

$ TZ=UTC date +%s
1439812072
$ TZ=CET date +%s
1439812072
$ TZ=GMT date +%s
1439812072

【讨论】:

    【解决方案2】:

    GMT 和 UTC 相差 2 小时。事实上,它们根本没有区别。因此,显示 GMT 和 UTC 的日期将始终显示完全相同的数字。

    我也不懂 bash,但我很难相信 120 分钟代表 2 小时。通常在使用日期进行数学运算时使用毫秒。

    【讨论】:

    • GMT 和 UTC 的差是 3 小时,但是因为我们有 GMT+1,所以是 2 小时
    • GMT = 格林威治。这是UTC。 GMT 不会切换到夏令时。对于英国的夏季,使用 TZ=WET。目前中欧时间是 UTC+2,而不是 UTC+3。
    • 对。 GMT 始终为 UTC+0(既不使用夏令时),所以它始终匹配。 WET 是 UTC+0 或 +1,具体取决于 DST,CET 是 UTC+1 或 +2。 EET 是 +2 或 +3(这必须是您想要的)。这就是我在timeanddate.comtimeanddate.com@ 上看到的所有欧洲时区
    【解决方案3】:

    在您喜欢的终端中使用以下序列

    export TZ=GMT; date
    

    【讨论】:

      【解决方案4】:
      date_format='+%d %B %Y %H:%M'
      
      datatest="2021-11-21 12:00:00 UTC"
      echo $(date -d "$datatest" "$date_format")
          
      datatest="2021-11-21 12:00:00 CET"
      echo $(date -d "$datatest" "$date_format")
         
      datatest="2021-11-21 12:00:00 GMT"
      echo $(date -d "$datatest" "$date_format")
      

      输出:

      21 November 2021 13:00
      21 November 2021 12:00
      21 November 2021 13:00
      

      【讨论】:

        猜你喜欢
        • 2010-09-15
        • 2023-03-26
        • 2018-09-17
        • 2018-01-08
        • 2014-10-12
        • 2012-05-01
        • 2012-08-28
        相关资源
        最近更新 更多