![Bash 脚本中的时区转换](https://linux22.com/image/1347469/Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E6%97%B6%E5%8C%BA%E8%BD%AC%E6%8D%A2.png)
我找到了一个关于如何使用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
具有相同的时区信息。此外,它取决于什么时候您执行命令,由于夏令时、区域更改其整个时区,或其他与日期相关的怪事。