2017-04-03 67 views
0

我使用下面的代码日期时间转换时区日期时间皈依夏令

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

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

提供的DateTime表示一个无效的时间。例如,当调整时钟向前,被跳过的期间内的任何时间无效

我怎样才能改变我的约会时间转换支持节能日光

+0

'time'的价值是什么,它应该代表CST中的某个时间,还是其他的东西,如UTC? –

+0

您可以通过始终使用UTC工作来解决此问题,并尽可能延迟任何转换至当地时间,以便在当地时间不再尝试进行任何转换/处理。由于每个UTC值*都可以*映射到当地时间(尽管有时会出现模糊的输出),您将永远无法使用无效时间。 –

+0

如果有任何DateTime,则考虑使用DateTimeOffset。 –

回答

0

另一种办法是转换为UTC,然后再瞄准时区。在转换为UTC时也检查时间是否过时,您可能需要对此进行调整,请检查以下内容:How to: Resolve Ambiguous times

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

+0

堆栈溢出时,仅链接回答通常[皱眉](http://meta.stackexchange.com/a/8259/204922)。如果链接萎缩并且变得不可用,这意味着您的答案在将来对用户而言是无用的。如果你可以在你的实际文章中提供你答案的一般细节,最好引用你的链接作为参考。 –