具有夏令时的日期时间转换

时间:2017-04-03 13:04:41

标签: c# datetime c#-4.0 datetime-conversion

我使用以下代码转换时区之间的日期时间

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(site.TimeZone);
returnTime = TimeZoneInfo.ConvertTime(DateTimeOffset.Parse(time.ToString()), timeZone);

CST时区的夏令时调整发生在3月12日。那天它给出了一个错误

  

提供的DateTime表示无效时间。例如,当向前调整时钟时,跳过的时间段内的任何时间都是无效的

如何更改支持日间保存的日期时间转换

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题并使用这个易于使用的替代方法修复了所有问题:

Noda Time "A better date and time API for .NET"

答案 1 :(得分:0)

替代方法是首先转换为UTC,然后转换为目标时区。转换为UTC时,还要检查传入的时间是否含糊不清,您可能需要对其进行调整,请检查以下How to: Resolve Ambiguous times

您需要知道源时间值的TimeZone - 可用于确定时间是否模糊。如果没有模糊转换为UTC通过源TimeZone通过检查它是标准时间(应用TimeZone的基本UTC偏移)或日光时间(应用非基础UTC偏移) - UTC偏移,模糊检查和日光检查可以通过TimeZoneInfo完成。如果不明确,您可以假设时间是标准时间,或者有另一种方法来指定它是否是白天时间 - 一旦确定,就像之前一样使用偏移值。然后使用目标TimeZone从UTC转换。