Bash脚本中的时区转换


4

我找到了一个关于如何用Linux转换时区的解决方案 date 命令: 按命令行转换时区

$ 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 欧洲东部时间 等,而不是像“亚洲/台北”,欧洲/莫斯科等时区。

Answers:


6

有一个标题为的部分 QUOTING man bash。我建议你看看,或者 关于引用的Bash参考手册

一个正确的命令行是:

DATE=$( date --date="TZ=\"Asia/Taipei\" $TIME" +%F\ %H:%M )
  • 运用 $( ) 防止一些引用问题 用反引号发生的。
  • 你需要对时区进行双引号(显然是出于格式化原因), 双引用参数以允许变量替换,因此只需转义内部引号一次。

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


它的效果非常好,谢谢!
Aleksandr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.