首页 > 解决方案 > 在 C# 中,如果 Windows 系统不遵守 DST,如何将 Windows 系统时间转换为 EDT?

问题描述

我们有一个设置为调整夏令时时间的 Windows 系统。当然,我们需要以挂钟时间向用户显示正确的时间,在我们的例子中是 EDT。

在我们旧的(很多很多的)系统中,我们必须定义时钟前进或后退一个小时的日期,并根据我们是否处于 DST 的天气转换时间。

这将如何在带有 c# 的 Windows 系统中工作?

即使设置为不进行调整,Windows 是否知道它何时处于 DST 中?

我怀疑只有当您的系统设置为针对 DST 进行调整时,转换才有效。我错了吗?

标签: c#windowsdatetimetimezone

解决方案


这将返回美国东部时区的当前时间,包括 EST 和 EDT:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime dt = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);

运行它的机器是否启用了 DST,或者它是否完全处于不同的时区都没有关系。命名时区将使用该时区的完整规则。

对于设置为禁用自动夏令时调整的系统,.NET 将仅在转换到本地时区或从本地时区转换时考虑到这一点。换句话说,当使用TimeZoneInfo.Local, or DateTime.ToLocalTime, or DateTime.ToUniversalTime来自当地时间)等时。

此外,一般不建议 Windows 系统用户禁用自动 DST 功能。禁用它的选项主要是旧配置。相反,用户应该简单地为他们所在的位置选择正确的时区。


推荐阅读