Bash 脚本中的时区转换

Ale*_*ndr 6 bash time-zone

我找到了一个关于如何使用 Linuxdate命令转换时区的解决方案: Timezone conversion by command line

$ date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010
Run Code Online (Sandbox Code Playgroud)

它运行良好,但我无法弄清楚如何在 Bash 脚本中使用它,当时间是一个变量时,例如:

TIME=18:00
DATE="`date --date='TZ="Asia/Taipei" $TIME' +%F\ %H:%M`"
echo $DATE;
Run Code Online (Sandbox Code Playgroud)

我在转义特殊字符时遇到问题。而且我完全不明白为什么该date命令适用于BSTEET等时区,而不适用于“亚洲/台北”、欧洲/莫斯科等时区。

Dan*_*eck 7

有一个标题为部分QUOTINGman bash。我建议你阅读它,或者关于引用Bash 参考手册

正确的命令行是:

DATE=$( date --date="TZ=\"Asia/Taipei\" $TIME" +%F\ %H:%M )
Run Code Online (Sandbox Code Playgroud)
  • 使用$( )可以防止出现反引号引起的一些引用问题
  • 您需要双引号时区(显然是出于格式原因)双引号参数以允许变量替换,因此只需将内部引号转义一次。

我不确定您在最后一段中要问什么,但请注意,从大陆/城市到时区的映射不是双射的。给定时区中的日期和时间,您将无法找出那是哪个城市。中的多个文件/usr/share/zoneinfo具有相同的时区信息。此外,这取决于你执行命令,由于夏令时,区域改变他们的整个时间段,或其他日期相关的怪事