时区规则的变化

Changes in time zone rules

佛罗里达州已批准 Sunshine Protection Act 取消佛罗里达州的夏令时。

我需要对我的 .NET 代码进行哪些更改才能在将 UTC 日期时间转换为佛罗里达当地时间时得到错误的答案?

我有 3 个关于日期时间的基本规则:

  1. 始终存储、传输和检索 UTC。时区?这是 .NET 可以在输出过程中处理的事情。在询问 Windows 时区和文化格式应该应用于该 UTC 值之后。您不处理时区,因为 that way lies madness.
  2. 避免以字符串形式存储、传输和检索。尽可能长时间使用 DateTime 类型。
  3. 如果您不能满足规则 2(XML 或其他 Serialstion),至少在所有端点选择固定的文化和字符串编码。您不想将这些问题添加到您的问题中。

在您的情况下,假设您遵循规则 1 并且这不是服务器应用程序,只需等待 Windows 更新它的 Timezone/UST 列表。这是一项 UI 工作,.NET 与负责此类工作的 Windows 系统有很好的联系。

如果这是一个服务器应用程序,每个用户都可以选择自己的时区。此处可能需要进行微小的更改。这真的取决于你如何进行国际化。

您无需更改任何代码。

.Net 从 Windows 获取其时区信息。只需更新 Windows。 Microsoft 将在法律生效前发布更新。

将列出更新 here (感谢@HansPassant)

Here is an example of such an update from 2016