UTC 到夏令时的偏移量不正确

Offset for UTC to Daylight Savings Time incorrect

我正在尝试将时间设置为 EST,然后查找 UCT 时间。 (我们有我们的理由)。我读到 "Eastern Standard Time" 应该考虑夏令时。但是当我们检查日期时,我们知道它属于夏令时,它仍然会尝试转换 5 小时而不是 4 小时。我是否缺少任何方法?或者我们必须做一些操作。

DateTimeOffset convertDateTime = new DateTimeOffset(
      subbmission.EntryDate,
      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time").BaseUtcOffset);

我添加了以下但老板不喜欢使用它..所以任何想法将不胜感激。

if (zone.IsDaylightSavingTime(convertDateTime.DateTime))
{
   currentDateTime = convertDateTime.DateTime.AddHours(-1);
}
else
{
    currentDateTime = convertDateTime.DateTime;
}

从根本上说,您使用了错误的方法 - 如果您想转换为 UTC,请使用 TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo)。您需要注意无效(因为它们被跳过)或模棱两可(因为时钟倒退,并且同一当地时间出现了两次)的时间。

如果您真的想要 DateTimeOffset 以便同时获得本地时间和 UTC 时间,您可以使用 call ConvertTimeToUtc 然后计算它们之间的差异。很遗憾 TimeZoneInfo 似乎没有 "construct a DateTimeOffset based on this DateTime in this time zone" 但我看不到它...

作为替代方案,您可以使用我的 Noda Time 项目,这当然使所有这些都更加清晰:)

为了获得时区日期的正确偏移量(有或没有夏令时),我使用类似

的东西
DateTimeOffset utcOffset = new DateTimeOffset(subbmission.EntryDate.ToUniversalTime(), TimeSpan.Zero);
var zone TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

var correctOffset = zone.GetUtcOffset(utcOffset);