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

时间:2017-04-11 13:33:17

标签: c# datetime utc

我正在尝试设置EST的时间,然后找到它的UCT时间。 (我们有我们的理由)..我已经读过"东部标准时间"应考虑夏令时。但是,当我们检查日期,并且我们知道它属于夏令时时,它仍然会尝试转换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;
}

2 个答案:

答案 0 :(得分:3)

从根本上说,您使用了错误的方法 - 如果您想转换为UTC,请使用TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo)。你会想要在无效期间(因为它们被跳过)或模棱两可的时候要小心(因为时钟回来了,相同的本地时间发生了两次)。

如果您确实需要DateTimeOffset以便同时获得本地和UTC时间,则可以使用调用ConvertTimeToUtc然后计算它们之间的差异。遗憾的是,TimeZoneInfo似乎没有"根据此时区中的DateTimeOffset构建DateTime"但是我看不到它......

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

答案 1 :(得分:1)

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

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

var correctOffset = zone.GetUtcOffset(utcOffset);