gpt4 book ai didi

linux - 如何在shell脚本中显示存储在不同时区变量中的日期

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:45 26 4
gpt4 key购买 nike

我有一个存储在变量中的日期

myTime=$(date -d "20120101 14:13:12" +'%Y%m%d %H:%M:%S') 

我想在不导出时区变量的情况下在不同的时区显示它。我试过这个命令:

c=$(TZ=":US/Eastern" date -d "$myTime" +'%Y%m%d %H:%M:%S')

但它不起作用。谁能告诉我我的错误是什么?

最佳答案

时区!一切都与时区有关。

你想存储时间在你当前的区域,所以你说

TZ=UTC
then="$(date -d '20120101 14:13:12' +'%Y%m%d %H:%M:%S')"

现在你有了一个日期字符串!但是等等,那个日期是 UTC 还是美国/东部时间?我们的 zone 设置为 UTC,但让我们看看该值...

echo "$then"
20120101 14:13:12

有趣的是,我没有看到时区...我怎么知道它是 UTC 时间?简单的回答:你不能!您必须对字符串中的区域进行编码,否则它就在当前区域中。

您可以更改区域 date 用于下一次运行:

eastern="$(TZ=US/Eastern date -d "$then" +%Y-%m%dT%H:%M:%S)"
echo "$eastern"
2012-01-01T14:13:12

但是等等,这不是同一时间吗?嗯,是的,但现在是东部……你只是不能说出来,因为你没有打印区域。输入未指定区域,因此它被读取为 Eastern,然后转换为输出区域,即 Eastern,并写为 Eastern,省略了区域。

为了在区域之间转换,您必须在时间字符串中包含区域。

GNU date 非常好,如果您提出要求,它会为您提供:

then="$(TZ=UTC date -d '20120101 14:13:12' --rfc-3339=seconds)"
echo "$then"
2012-01-01 14:13:12+00:00

现在您在输入区中看到了您输入的日期/时间,并且您知道它在输入区中,因为 +00:00 告诉您这一点。

现在您可以返回并尝试转换它:

eastern="$(TZ=US/Eastern date -d "$then" --rfc-3339=seconds)"
echo "$eastern"
2012-01-01 09:13:12-05:00

啊哈!现在,因为您在 -d 的输入中包含了区域,并且您告诉 date 在不同的区域输出,时间已经改变。如果您确实需要,可以在此步骤中省略输出格式中的区域:

eastern="$(TZ=US/Eastern date -d "$then" '%Y-%m-%d %H:%M:%S')"
echo "$eastern"
2012-01-01 09:13:12

但是您不应该省略时区,因为时间字符串的后续用户将不知道它代表什么时区。

关于linux - 如何在shell脚本中显示存储在不同时区变量中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40313753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com