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

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

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还是美国/东部?我们的区域设置为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

但是,等等,不是同时吗?好吧,是的,但是现在是东方的……您无法分辨,因为您没有打印区域。输入未指定区域,因此将其读取为“东部”,然后转换为输出区域,即“东部”,然后写为“东部”,省略了区域。

为了在区域之间进行转换,必须在时间字符串中包括区域。

GNU日期非常好,如果您提出以下要求,它将为您提供:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Django中显示不同时区中的所有日期时间对象

在PHP中处理不同时区中存储/显示日期的最佳方法?

在不同时区的命令输出中显示日期

如何在两个不同的TextView中显示当前时区和完整日期时间?

如何在shell脚本中添加日期

如何在 Shell 脚本中访问变量

如何从存储在Shell脚本变量中的日期减去一年?

如何在shell变量中存储行

如何在变量中存储不同的整列?

如何在shell脚本中捕获存储在变量中的部分版本号

如何在Shell脚本中的变量中存储的每个单词周围添加引号

如何在shell脚本中存储变量中包含空格的文件名

Java中具有不同时区的日期格式

如何在shell脚本中将sql查询输出存储在变量中

如何在Shell脚本中更改文件中的日期格式?

如何在Rails中管理红宝石中的不同时区

如何在JavaScript中的不同时区中获取给定时间的本地时间

如何将Shell脚本的输出存储到变量中

以 UTC 格式存储日期/时间,以不同时区显示本地时间和格式

如何在C ++中的某些变量中存储日期

如何选择不同时区的日期?

从文件中获取输入并将它们存储在 shell 脚本中的不同变量中

如何在考虑 linq2db (CONVERT_TZ) 中的时区的同时按日期分组?

从shell脚本的输出中捕获并存储值,同时还显示进度?

如何在脚本中设置默认时区?

如何在Postman中获取不同时区的当地时间?

更新 shell 脚本中存储的变量

如何在Shell脚本中设置日期范围

如何在shell脚本中接受日期时间组合?