Windows 上“时区”的历史/解释

Windows 上“时区”的历史/解释

不确定这是否superuser.com是提出该问题的合适 StackExchange 网站;如果不是,请将我引荐到最合适的网站。

Windows 自带的时区起源于哪里?为了举例,我将在这里列出一些(使用 PowerShell,但信息不是 .NET 特定的):

PS C:\Users> [TimeZoneInfo]::FindSystemTimeZoneById("W. Europe Standard Time")

Id                         : W. Europe Standard Time
HasIanaId                  : False
DisplayName                : (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
StandardName               : W. Europe Standard Time
DaylightName               : W. Europe Daylight Time
BaseUtcOffset              : 01:00:00
SupportsDaylightSavingTime : True


PS C:\Users> [TimeZoneInfo]::FindSystemTimeZoneById("Central Europe Standard Time")

Id                         : Central Europe Standard Time
HasIanaId                  : False
DisplayName                : (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
StandardName               : Central Europe Standard Time
DaylightName               : Central Europe Daylight Time
BaseUtcOffset              : 01:00:00
SupportsDaylightSavingTime : True


PS C:\Users> [TimeZoneInfo]::FindSystemTimeZoneById("Romance Standard Time")

Id                         : Romance Standard Time
HasIanaId                  : False
DisplayName                : (UTC+01:00) Brussels, Copenhagen, Madrid, Paris
StandardName               : Romance Standard Time
DaylightName               : Romance Daylight Time
BaseUtcOffset              : 01:00:00
SupportsDaylightSavingTime : True


PS C:\Users> [TimeZoneInfo]::FindSystemTimeZoneById("Central European Standard Time")

Id                         : Central European Standard Time
HasIanaId                  : False
DisplayName                : (UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb
StandardName               : Central European Standard Time
DaylightName               : Central European Daylight Time
BaseUtcOffset              : 01:00:00
SupportsDaylightSavingTime : True

所有这四个条目("W. Europe Standard Time", "Central Europe Standard Time", "Romance Standard Time", "Central European Standard Time")本质上是等效的,但在某些方面令人困惑。以下是一些示例:

  • 名字西欧标准时间常用于里斯本、伦敦等地使用的UTC±00:00,那么这个名字从何而来?
  • 这个单词浪漫第三个则很奇怪。其中一个城市(哥本哈根)使用非罗曼语(丹麦语,日耳曼语),而另一个城市(罗马,其名字来自罗马)则使用非罗曼语(丹麦语,日耳曼语)。浪漫派生)位于另一个条目中。
  • 这些分组毫无意义。例如,为什么阿姆斯特丹和布鲁塞尔分在不同的组?为什么斯德哥尔摩和阿姆斯特丹分在一组,而哥本哈根和布鲁塞尔分在一组?
  • 如果您在奥斯陆(未提及),您会选择哥本哈根还是斯德哥尔摩?
  • 名字中欧标准时间中欧标准时间非常相似?为什么萨格勒布没有与卢布尔雅那归为一组?巴尔干半岛的城市完全随机地分布在这两组中?

所以我的主要问题是,这些群体的解释是什么?有没有tz 数据库Windows 使用的组中的条目?

从“设置”下拉菜单

答案1

所有这四个条目(,,,"W. Europe Standard Time")本质上是等效的,但在某些方面令人困惑。"Central Europe Standard Time""Romance Standard Time""Central European Standard Time"

是的。

该名称W. Europe Standard Time通常用于里斯本、伦敦等地使用的 UTC±00:00。

通俗地说,是的 -“西欧时间”适用于几个 UTC+0 的地方。但是,Windows 认为那是 UTC+1。伦敦和里斯本的 Windows 时区 ID 是"GMT Standard Time"

那么这个名字从何而来?

这是一个错误,已被纳入数据之中。

第三个条目中的“罗曼语”一词很奇怪。 提到的一个城市(哥本哈根)使用非罗曼语(丹麦语,日耳曼语的一种),而另一个条目中却有一座明显与罗曼语相关的城市(罗马,罗曼语源于罗马这个名字)。

我觉得这有点夸张。最先提出进入这个区域的人更有可能认为巴黎是一个浪漫的地方。(是的,我是认真的。)

这些分组毫无意义。例如,为什么阿姆斯特丹和布鲁塞尔分在不同的组?为什么斯德哥尔摩和阿姆斯特丹分在一组,而哥本哈根和布鲁塞尔分在一组?

没有其他原因,只是在选择标识符时,欧洲国家和对应城市列表很长,且时区相同。我推测它们被分成四个是为了使下拉列表在 UI 中可见,而不会使其过宽,也不会因为删除其中一个而让任何人不高兴。

如果您在奥斯陆(未提及),您会选择哥本哈根还是斯德哥尔摩?

我不能代表一个人说话但正确的映射应该是斯德哥尔摩。(W. Europe Standard Time

中欧标准时间和中欧标准时间这两个名称很相似?为什么萨格勒布没有和卢布尔雅那归为一组;巴尔干半岛的城市完全随机地分布在这两组之间?

是的。

所以我的主要问题是,这些群体的解释是什么?

我对此进行了大量研究,我能给出的唯一合理答案是:从长远来看,人类行为往往是随机的。因此有句话说,“事后看来一切都很清楚”。

  • 考虑一下,使用这些数据的第一批 API 是 Windows NT 最早版本的一部分。虽然 tz 数据库项目当时已经存在,但它并不像今天这样普遍。微软也没有采用开源技术的文化,也没有对系统间互操作性(如时区等深奥的东西)有多大兴趣。

  • 需要花费更长的时间才能稍微考虑历史时区变化(Windows Vista 在注册表项中添加了“动态 DST”)。

  • 一般来说,唯一的动机是让任务栏上的时钟与微软销售 Windows 的时区相符。因此,列表不必覆盖全球 100% 的区域 - 而只需覆盖有支持合同的区域。如果您在其他时区使用 Windows,您可能没有渠道说服微软的某个人这是一个值得花费工程资金的重要问题。

  • 微软也曾遇到过严重的问题,因为地图上的时区标注方式会影响产品销售。(见这个博客或者这个较旧的 tz 列表帖子更多细节。)

  • 随着时间的推移,越来越多的时区被添加到列表中。有时这些更改是应客户要求而进行的,有时是为了响应政府更改标准偏移或夏令时规则。有时这些更改是大型项目的一部分,有时是一次性的。通常由不同的团队根据他们的目标进行更改想法是正确的做法,但不一定符合先例(例如:“俄罗斯时区 X”编号区域)。

好消息是,世界已经改变,微软也随之取得了长足进步。.NET 等技术已尽可能地采用 IANA 时区。Windows 本身也已在 WinRT/UWP 等多个领域采用 IANA 时区。2016 年,我在微软工作,帮助 Windows 团队填补差距。现在,地球上的任何人都可以尽可能地合理地选择时区(以符合微软修订的使命宣言:)"to empower every person and every organization on the planet to achieve more"。有一个可爱的《连线》杂志上的一篇文章关于这些人。我不再在那里工作,但是我协助制定的政策继续支持努力保持更新。您可以关注他们的工作Microsoft DST/TZ 博客

是否有从 tz 数据库条目到 Windows 使用的组的映射?

是的。事实上的标准映射是windowsZones.xml文件,位于 Unicode CLDR 项目中。它被 Windows 本身、.NET、许多第三方库以及几乎所有运行重症监护室

在 .NET 6+ 中,无论是在非 Windows 系统上运行,还是在包含 ICU 的现代 Windows 系统上运行,您都可以只使用 IANA 标识符,而无需在程序中进行旧式转换。还有我的时区转换器库,无论 .NET 版本或操作系统如何,它都可以做很多相同的事情。

答案2

可以在 Microsoft 文章中找到解释 引入新的 Windows 时区 从2019年起:

  1. 在 Windows 中创建新时区的标准

当某个国家/地区(包括附属地)或国家/地区的一级行政区划(州、省、部门等)具有与现有时区条目不同的 UTC 偏移量和 DST 规则历史记录时,将创建新的 Windows 时区条目。此外,当较小的地理区域(县、市等)的当前 UTC 偏移量和 DST 规则组合未由其他 Windows 时区条目提供时,该地理区域也有资格获得新的 Windows 时区条目。

  1. 新时区

已添加以下时区,因为它们当前没有表示,或者因为它们近年来具有独特的变化历史。

答案是历史性的——当国家改变规则时,微软可能会创建包含这些国家的新组,或将它们移至另一个组。规则可能包括夏令时日期或任何可能改变 Windows 需要为该国设置的时间的内容。

当规则改变时,微软似乎并没有统一群组,而是倾向于保留以前的群组,即使多个群组中的条目今天使用相同的时区。

答案3

我认为罗曼语是指适用于典型地理区域/管辖区的语言群体。(例如“Suisse Romande”是指瑞士法语区。)罗曼语是一种直接源自拉丁语的语言,请参阅https://en.wikipedia.org/wiki/Romance_languages。奇怪的是,给定时区的详细信息不匹配,或部分匹配。我想它始于特定司法管辖区,当时该标签有意义,然后随着 DST 规则的变化,它偏离了原始构成 - 例如丹麦/丹麦几乎不能算作拉丁语国家。

答案4

微软知识库中有一篇关于此问题的文章,我大约 10 年前读过。
我做了一些调查,但再也找不到那篇文章了。

据我记得:

阿姆斯特丹和布鲁塞尔现在可能实际上是同一时区,但过去并非如此。
为了使回溯到当时的日期时间计算正常工作,需要维护这些单独的时区,即使如今它们的功能相同。

(我推测同样的事情也适用于其他时区。)

至于奇怪的名字和奇怪的区域:这些也是历史性的,并且出于兼容性的原因而被保留下来。

相关内容