我所在国家/地区的夏令时已更改,但 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 无法识别更改的主要内容,如果未能解决你的问题,请参考以下文章
申请已批准 - 待定开发者版本 - 您所在的国家/地区目前无
检查每个广告系列在一个国家/地区的销售状态是不是已更改,并将其分配给结果中每个广告系列的所有国家/地区