Bash 脚本中的时区转换

Bash 脚本中的时区转换

我找到了一个关于如何使用Linuxdate命令转换时区的解决方案: 通过命令行进行时区转换

$ date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010

它运行得很好,但我不知道如何在 Bash 脚本中使用它,当时间是一个变量时,例如:

TIME=18:00
DATE="`date --date='TZ="Asia/Taipei" $TIME' +%F\ %H:%M`"
echo $DATE;

我在转义特殊字符时遇到了问题。我完全不明白为什么该date命令适用于时区,例如BST欧洲东部时间等,并且不包含“亚洲/台北”、欧洲/莫斯科等时区。

答案1

其中有一个部分标题为引用man bash。我建议你读一下,或者Bash 参考手册中的引用

正确的命令行是:

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

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

相关内容