【发布时间】:2014-06-06 18:43:47
【问题描述】:
我已经看到了一些与其他编程语言或操作系统相关的问题/答案,但我发现没有针对我的特定场景的通用解决方案。我想在 Linux shell 脚本或纯 C 中获取给定时区的 GMT 偏移量(普通标识符,如 EDT、CET 或 Europe/Berlin)。
一个简单的解决方案是:
$ TZ=":Europe/Berlin" date +%z
但这将打印 当前 GMT 偏移量(如果当前正在使用,则包括 DST)。
这里有一个更好的例子来说明我的意思:
$ TZ=":Europe/Berlin" date +%z --date="1 Jan 2014"
+0100
$ TZ=":Europe/Berlin" date +%z --date="1 May 2014"
+0200
我需要一个选项来始终获取任何国家/城市的非 DST 值(此处:+0100)。
其他可以解决我的问题并与此相关的问题:
如果事先不知道偏移量,如何找到给定城市(欧洲/柏林)的正确非 DST 时区 (Etc/GMT-1)?
您通常如何知道 DST 在给定时间戳处于活动状态?
$ TZ=":Europe/Berlin" date --date="2014-01-01"
Wed Jan 1 00:00:00 CET 2014
$ TZ=":Europe/Berlin" date --date="2014-05-01"
Thu May 1 00:00:00 CEST 2014
标识符 CEST(中欧夏令时间)和 CET(中欧时间)在世界其他地方可能并不常见,因此如果选择简单地获取 DST=1 或 DST=0 之类的选项会更好有人需要它。通过 zdump,您可以获得所有更改 DST 的时间戳的 isdst=0 或 isdst=1,但它不是那么容易使用 IMO。
【问题讨论】:
标签: linux bash datetime timezone utc