如何检查给定日期是否为DST日期?

我有一个日期作为字符串。 没有时间信息。 例如。 “20131031”ie)2013年11月31日。

我想validation是否是DST发生的日期? 西方欧洲。

ie)c#是否有API,也就是说它是DST日期? 对于10月的最后一个星期日和3月的最后一个星期日,我只想要一个布尔值作为回报。 这是调整时钟的日期。

是的,有一个API:TimeZone.GetDaylightChanges

http://msdn.microsoft.com/en-us/library/system.timezone.getdaylightchanges.aspx

您提供一年,它将返回一个DaylightTime对象,其中包含夏令时的开始和结束日期。 然后,您可以将您的日期与这两个日期进行比较,以确定其是否为DLS日期。

虽然这个答案已被接受,但请参阅下面的Matt Johnson的答案,详细说明为什么它不是最佳答案以及为什么应该使用TimeZoneInfo类。 https://stackoverflow.com/a/19523173/7122

每个MSDN文档

重要

只要有可能,请使用TimeZoneInfo类而不是TimeZone类。

您应该考虑使用TimeZone

相反,您可以检查本地时区的DST,如下所示:

 DateTime dt = new DateTime(2013,10,31); TimeZoneInfo tzi = TimeZoneInfo.Local; bool isDST = tzi.IsDaylightSavingTime(dt); 

对于特定时区,请执行以下操作:

 DateTime dt = new DateTime(2013,10,31); TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); bool isDST = tzi.IsDaylightSavingTime(dt); 

如果您想知道白天时段的开始和停止时间,您必须完成tzi.GetAdjustmentRules()的转换规则。 但这可能会有点复杂。 你可能会更好地使用Noda Time 。

您可以使用TimeZone.IsDaylightSavingTime方法,它需要一个DateTime

 public virtual bool IsDaylightSavingTime( DateTime time ) 

例如:

 var tz = TimeZone.CurrentTimeZone; var is_dst = tz.IsDaylightSavingTime(DateTime.Now); 

有关更多信息,请参阅MSDN 。