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

Daylight Saving changed on my country but C#/Windows doesn't recognize the changes

我在 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 属于系统命名空间,这让我相信问题出在 Windows 配置中。

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

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

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

Google 剧照对我来说是错误的,其他一些网站已经更新了。

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

我可以代表 Microsoft 告诉您,我们知道这一变化,目前正在 in-progress 通过我们的服务流程。可用时将在 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。