我所在国家/地区的夏令时已更改,但 C#/Windows 无法识别更改

Posted

技术标签:

【中文标题】我所在国家/地区的夏令时已更改,但 C#/Windows 无法识别更改【英文标题】:Daylight Saving changed on my country but C#/Windows doesn't recognize the changes 【发布时间】:2018-08-14 08:37:44 【问题描述】:

我有一个托管在 Azure(美国)上的 WebAPI 应用程序,我无法完全控制服务器。

关于显示日期的全球化,我决定将其固定用于我的国家 (BR),使用 ID E. South America Standard Time

以下方法效果很好:

TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time");

该方法以某种方式检查指定的日期IsDaylightSavingTime 是否,以确保它显示正确的日期时间。完美运行!

但今年总统宣布巴西的夏令时不会从 10 月 3 日星期日开始,而是从现在开始的 11 月。

此方法正在考虑,它从 2018 年 10 月 21 日开始,已更改。如果一直这样,我肯定会遇到问题。

我发现IsDaylightSavingTime 属于 System 命名空间,这让我相信问题出在 Windows 配置中。

我不知道微软是否能够在所有 Azure 服务器上自动更改它,或者我是否能够以某种方式手动更改它。

*Obs:我不想这样做来修复它,如果微软更新夏令时会有更多问题:

if (date > XXXX && date < XXXX) date.AddHours(1);

Google Stills 显示它对我来说是错误的,其他一些网站已经更新了它。

【问题讨论】:

Google 至少部分更新了这一点。无论如何,每个人都必须在 10 月之前实施这一改变——我认为全世界都不会有人围观等待是否有人在某个地方改变 DST 规则,以便他们可以立即实施。 夏令时更改通过 Windows 更新交付,请确保在此计算机上启用它。并且TimeZoneInfo有意缓存数据,确保回收应用池。 @oerkelens 有道理,它不会在公告中自动更改(那是 3 个月前),但我担心它是否会在某个时候自动更新,或者是否需要手动输入。 @HansPassant 坦克你,我会尽量确保服务器正确获取 WindowsUpdatePackages。不知道缓存是否会出问题,但知道也很好。 【参考方案1】:

是的,你说得对,2018 年巴西夏令时的开始时间已经改变。This is described well here。

我谨代表 Microsoft 告诉您,我们已了解此更改,并且目前正在通过我们的服务流程进行。届时将在the Microsoft Daylight Saving Time & Time Zone Blog发布官方公告。

与之前的 TZ/DST 更新一样,保持更新的系统将通过 Windows 更新或 Windows 10 服务过程自动接收此更改。 Azure PaaS 服务有自己的接收更新的过程。正如他们所做的那样,他们将接受这种变化。您应该预计从发布更新到在您的环境中应用它之间需要一段时间。

不建议您尝试通过添加一个小时来自行纠正此问题,如您在问题中显示的那样。这样做会导致应用更新后休息一小时。

作为替代方案,如果您想自己控制此功能,请考虑在您的应用程序中实现Noda Time。最新的 2.2.4 版本包括 IANA TZDB 2018c,其中包括巴西更改。您可以使用 America/Sao_Paulo 作为时区 ID。

【讨论】:

以上是关于我所在国家/地区的夏令时已更改,但 C#/Windows 无法识别更改的主要内容,如果未能解决你的问题,请参考以下文章

不允许客户在 WooCommerce 结帐中更改国家/地区

申请已批准 - 待定开发者版本 - 您所在的国家/地区目前无

检查每个广告系列在一个国家/地区的销售状态是不是已更改,并将其分配给结果中每个广告系列的所有国家/地区

获取用户所在国家/地区的可靠方法?

如何将我在 iTunes 中的应用更改为我所在国家/地区的特定连接?

Woocommerce Checkout:在国家下拉列表中添加占位符[重复]