我正在尝试设置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;
}
答案 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);