如何获取UTC时间和当地时间(以秒为单位)之间的差异?

问题描述 投票:0回答:4

如何在 bash 中获取 UTC 时间和本地时间(以秒为单位)之间的差异?

bash date
4个回答
4
投票
如果没有一些与时间相关的滑稽动作,

%s
并不是答案的平凡部分,纪元秒明确是UTC(或者如果你是老派的话可能是GMT),所以设置TZ不会影响它。

类似于 twalberg 的建议:

IFS=":" read hh mm < <(date +%:z)
echo $(($hh*3600+$mm*60))

您可以通过为

date
命令设置 TZ 来测试这是否正在执行您想要的操作:

IFS=":" read hh mm < <(TZ=Australia/Sydney date %:z)    # answer is 39600
IFS=":" read hh mm < <(TZ=US/Eastern date +%:z)         # answer is -18000

(这不是严格 bash 答案,因为它需要 GNU 日期或同等版本,5.90 及更高版本支持 %:z 和 %::z)


0
投票

您可能需要做一些工作才能在几秒钟内获得它,但是

date +%z
会将您配置的时区偏移报告为
[+-]HHMM
。解析其输出并进行适当的数学计算以在几秒钟内计算出来。


0
投票

这只适用于整小时而不是分钟的地方。

echo $(($( date +%z)*36))

0
投票

Spuratic 先生给出的答案并不完全正确,因为负数处理不当。这会影响 2016 年之前纽芬兰和委内瑞拉的居民。

对于更正确的变体(需要 2013 年之前发布的 gnu-libc、date 和 Bash 命令):

utc_offset ()
{
    local z r;
    read z < <( date +%z );
    (( r= 0 ${z:0:1} ( ${z:1:2}*3600 + ${z:3:2}*60 ) ));
    echo $r
}

示例:

TZ=US/Eastern utc_offset
-14400
(w/summer time)

TZ=Australia/Sydney utc_offset
39600

TZ=Asia/Kolkata utc_offset
19800

TZ=Canada/Newfoundland utc_offset
-9000
(not -5400 !)
© www.soinside.com 2019 - 2024. All rights reserved.