将ISO8601转换为BASH变量中的本地时间

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

我从API提取一个ISO8601变量“ $ sunrise”。现在,我想将其转换为当地时间。我也将$ timeZone(美国/丹佛风格)用作变量。

一个ISO8601时间戳看起来像这样:2019-11-09T11:36:14 + 00:00

我希望在当地时区提供一个友好的人间时间。这将是日出。

我已经尝试过脚本中的每个组合,如下所示:

TZ="$timeZone" newSunrise=echo $date -d "$sunrise" +"%s"

我无法正常工作。有人可以帮我吗?

linux bash date iso8601
3个回答
1
投票

基于上述解决方案,并在“本地时间”生成结果]

var="2019-11-09T11:36:14+00:00"
date -d"TZ=$(date +%Z) $var"

调用date +%Z是必需的,因为环境变量TZ并非始终设置。在那些情况下,系统范围的“本地时区”(我相信/ etc / timezone,但可能会有其他逻辑)。


1
投票

您需要将时区放入日期参考中,例如:

var="2019-11-09T11:36:14+00:00"
timeZone="America/Denver"
newsunrise=$(date -d"TZ=\"${timeZone}\" $var")

0
投票

我的代码将进入程序并分配变量。我尝试调整您的两个建议,但均未按我的建议执行。

newSunrise=date -d"TZ=$(date +%Z) $sunrise"

没有数据存储在$ newSunrise中

而且,您为什么不引用引号?我正在学习。

© www.soinside.com 2019 - 2024. All rights reserved.