【问题标题】:What happens to TimeZoneInfo if a country changes it's Daylight savings settings?如果某个国家/地区更改了夏令时设置,TimeZoneInfo 会发生什么情况?
【发布时间】:2021-11-12 08:44:40
【问题描述】:

在 .Net 中有一个 TimeZoneInfo 类可以将 DateTimes 从一个 TZ 转换为另一个 TZ,并且考虑到夏令时。

我猜,在内部,.Net 只是硬编码了有关夏令时开始和结束时间的所有数据。

我的问题是 - 如果我有一个应用程序使用 TimeZoneInfo 在 TZ 和某个国家/地区之间进行转换,那么它是夏令时设置(或“政策”或任何人类所称的),这是反映这种变化的唯一方法应用程序是手动设置该国家/地区的检查或应用一些 .Net 更新?

此外,由于夏令时是按国家/地区划分的,并且 TimeZoneInfo 与时区一起使用,我如何告诉它转换时间以考虑特定国家/地区?我只能看到一个使用时区 ID 的构造函数。

【问题讨论】:

  • 夏令时不是“每个国家”。它还可能取决于您在一个国家/地区的位置,而不仅仅是该国家/地区。一个国家可以有多个时区! “我只能看到一个使用时区 ID 的构造函数。”这还不够吗?
  • @Sweeper,很大程度上是“每个国家”,因为决定他们是否拥有 DS 的是国家,而不是时区。所以,不,这还不够。也许我需要澄清一下 - 每个时区也可能有(令人震惊的)许多国家。
  • 在美国,它是每个州的。例如,在亚利桑那州,虽然该州不使用 DST,但该州的美洲原住民保留区却使用。
  • 澳大利亚是另一个例子。一些州遵守夏令时,其他州则不遵守。不过,我不能告诉你哪些可以,哪些不可以。

标签: c# datetime time timezone


【解决方案1】:

根据软件包,时区数据来自您的操作系统,因此软件包将在操作系统更新时更新。这也是 SQL Server 的工作方式。例如,美国国会在 2000 年代中期更改了 DTS,我们不得不向客户发布 Windows 更新,以确保我们的代码在正确的时间运行。每当发生这种情况时,都必须更新某些 NuGet 库。例如,TimeZoneConverter 会在时区更改时更新。

注意:DTS 和时区受法律控制,因此没有确定它们的算法或公式。美国的某些地区、夏威夷和亚利桑那州(但不是全部)根本没有 DTS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2018-02-21
    • 2014-02-22
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多