无需夏令时将 UTC 转换为不同的时区

时间:2021-07-20 16:48:22

标签: c# .net datetime timezone

目前我有一个 UTC 日期,我必须根据我的客户端时区位置将其转换为不同的时区。

这是我当前使用的代码:

var timezoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timezone);
var clientTime = TimeZoneInfo.ConvertTimeFromUtc(createDateTime, timezoneInfo);

我知道这会自动使用夏令时并根据时区为我提供当前时间。 我有一个布尔值,用于确定是否启用夏令时。根据我的布尔值,上述方法效果不佳。 是否有内置的方法或代码可以在没有夏令时的情况下将 UTC 转换为不同的时区?

1 个答案:

答案 0 :(得分:1)

在您的应用程序中提供布尔夏令时标志通常是一个坏主意。时区都是关于特定地区的实际当地时间,并且总是包括控制该时区的政府是否已决定是否适用夏令时。换句话说 - 这不取决于用户,而取决于他们的政府。 Microsoft 和 IANA 时区社区竭尽全力确保时区准确反映这些政府决策。

如果你真的必须这样做,你可以考虑使用 TimeZoneInfo.BaseUtcOffset 属性,或者你可以检查 TimeZoneInfo.IsDaylightSavingTime 的结果来决定是否从结果中减去时间。但是,这两种方法都存在边缘情况,如果标准时间 偏移量与夏令时无关,则会出现错误。此外,并非所有时区在夏令时都会移动整整一小时,有些时区会移动 30 分钟。

最终,我的建议是保持代码原样,不要尝试使用该布尔标志。相反,返回到 UX 或该标志起源的任何地方并将其删除。

相关问题