UTC到夏令时的偏移量不正确
问题描述:
我想设置一个时间到EST,然后找到它的UCT时间。 (我们有我们的理由)..我读过“东部标准时间”应该考虑夏令时。但是,当我们检查日期,并且我们知道它属于夏令时,它仍会尝试转换5个小时而不是4个。有没有我缺少的方法?或者我们必须做一些操作。UTC到夏令时的偏移量不正确
DateTimeOffset convertDateTime = new DateTimeOffset(
subbmission.EntryDate,
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time").BaseUtcOffset);
添加以下BU老板不在使用this..so任何想法的一个风扇,将不胜感激。
if (zone.IsDaylightSavingTime(convertDateTime.DateTime))
{
currentDateTime = convertDateTime.DateTime.AddHours(-1);
}
else
{
currentDateTime = convertDateTime.DateTime;
}
答
从根本上说,你正在使用错误的做法 - 如果你要转换为UTC,使用TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo)
。你会在周围无效(因为它们被跳过)或模棱两可(因为时钟返回,并且相同的本地时间发生两次)而需要小心。
如果您确实需要DateTimeOffset
以便您可以同时获得本地时间和UTC时间,则可以使用调用ConvertTimeToUtc
然后计算它们之间的差异。这是一个耻辱,TimeZoneInfo
不会出现有一个“构建在此基础上DateTime
在这个时区DateTimeOffset
”但我不能看到它... ...
作为替代方案,你可以用我的Noda Time项目,当然这使得这一切变得更加清晰:)
您*调用了'TimeZoneInfo.FindSystemTimeZoneById(“东部标准时间”)。BaseUtcOffset'。而不是当前的偏移量,您请求* base *偏移量,即5 –
您应该使用'TimeZoneInfo.ConvertTimeToUtc(DateTime,TimeZoneInfo)'。毕竟,你尝试转换为UTC ......但请注意,本地日期/时间值是模糊的或跳过的,我永远不会记得'TimeZoneInfo'对这些值做了什么。 –
@JonSkeet这看起来更干净,所以这应该将utc从-5的差异转换为-4? –