我的 BST 时区是否晚了一个小时?

rkh*_*hff 5 linux systemd timezone

我的系统(Debian 测试中的 Gnome 3)对当前时间感到困惑。当我运行时date,时间显示正确,但有些应用程序比时间晚了一个小时。例如,当我向 Gnome 日历添加一个事件时,日历约会中显示的事件时间将是我输入的时间减去一小时。

我发现了问题所在,但不知道如何解决:

$ date ; TZ=GMT date ; TZ=BST date
Sun 30 Apr 11:25:37 BST 2017
Sun 30 Apr 10:25:37 GMT 2017
Sun 30 Apr 10:25:37 BST 2017
Run Code Online (Sandbox Code Playgroud)

输出的前两行是正确的,第三行晚了一个小时。我不明白的是为什么 BST 时区似乎比一个小时晚了,而同时当前时间是正确的 - 并且使用 BST。

这也可能是相关的:

$ timedatectl status
      Local time: Sun 2017-04-30 11:33:07 BST
  Universal time: Sun 2017-04-30 10:33:07 UTC
        RTC time: Sun 2017-04-30 10:33:07
       Time zone: Europe/London (BST, +0100)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no
Run Code Online (Sandbox Code Playgroud)

编辑 zdump /etc/localtime 的输出:

$ zdump /etc/localtime
/etc/localtime  Sun Apr 30 12:22:53 2017 BST

$ date ; TZ=GMT date ; TZ=BST date
Sun 30 Apr 12:22:53 BST 2017
Sun 30 Apr 11:22:53 GMT 2017
Sun 30 Apr 11:22:53 BST 2017
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

BST不被识别为时区名称。它在输出中用作缩写,但不能使用它来指定时区。大多数程序不会检查时区名称,如果无法识别时区名称,则会默认默认为 GMT。

BST、CET、EST 等缩写并不总是明确定义,有时甚至含糊不清(是北美标准时间还是澳大利亚东部标准时间?)。它们仅在给定区域中有意义,而时区配置通常适用于全球范围内使用。此外,像 BST 这样的缩写实际上并不指定时区,而仅指定一年中某个时区的时间(英国,夏令时有效)。因此,您应该使用明确的名称,其中大多数都遵循大陆/城市的模式。在典型的 Linux 系统上,我想在许多其他 Unix 变体上也是如此,您可以通过查看目录来查看哪些缩写可用/usr/share/zoneinfo

因此,不要GMT在冬天和BST夏天使用,而是使用Europe/London.


Rui*_*iro 1

补充吉尔斯的答案;我和OP在同一时区。西欧时间又名WET它是官方名称;如果我没记错的话,葡萄牙在 1996 年左右就被纳入了 Unix 时区。

\n\n

https://en.wikipedia.org/wiki/Western_European_Time

\n\n
\n

欧洲时间(WET,UTC\xc2\xb100:00)是覆盖西欧和西北欧部分地区的时区。

\n\n

以下国家和地区在冬季使用 WET:
\n - 加那利群岛,> 自 1946 年起(西班牙其他地区为 CET,UTC+1)\n - 法罗群岛,自 1908 年起
\n - 格陵兰岛东北部(丹麦港及周边地区) )
\n - 冰岛,自 1968 年起
\n - 葡萄牙,自 1912 年起暂停(亚速尔群岛除外,UTC\xe2\x88\x921)[1]
\n - 马德拉群岛,自 1912 年起暂停[2]
\n - 爱尔兰,自 1916 年(法律上称为格林威治标准时间)起,1968 年至 1971 年间除外
\n - 英国及其皇家属地,自 1847 年起在英格兰、苏格兰、威尔士、海峡群岛和马恩岛,自 1916 年起在北爱尔兰 (法律上称为格林威治标准时间),有停顿

\n\n

在英国,从 1940 年到 1945 年,冬季使用英国夏令时间 (BST=CET),从 1941 年到 1945 年以及 1947 年,夏季使用英国双夏令时间 (BDST=CEST)。1968年2月18日至1971年10月31日期间,全年使用BST。

\n\n

除冰岛外,上述国家均在夏季实施夏令时,改为西欧夏令时(WEST,UTC+1),比 WET 早一小时。WEST 在英国被称为英国夏令时间,在爱尔兰被正式称为爱尔兰标准时间。

\n
\n\n

夏令时的官方名称是 WEST(西欧夏令时间),WET用于TZ,并考虑夏令时/DST,提前一小时。

\n\n

如今,“欧洲/伦敦”可能是更好的选择,但要知道WET简写在某些情况下仍然有用。

\n\n

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

\n\n

因此,将结果与初始测试进行比较:

\n\n
$date ; TZ=GMT date ; TZ=WET date\nMon May  1 09:36:10 WEST 2017\nMon May  1 08:36:10 GMT 2017\nMon May  1 09:36:10 WEST 2017\n
Run Code Online (Sandbox Code Playgroud)\n