我有一个日期作为字符串。没有时间信息。 例如。 “20131031”ie)2013年11月31日。
我想验证是否是DST发生的日期? w.r.t. WesternEurope。
ie)c#是否有API,也就是说它是DST日期? 对于10月的最后一个星期日和3月的最后一个星期日,我只想要一个布尔值作为回报。 这是调整时钟的日期。
答案 0 :(得分:7)
重要
尽可能使用
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。
答案 1 :(得分:4)
您可以使用TimeZone.IsDaylightSavingTime
方法,它需要DateTime
:
public virtual bool IsDaylightSavingTime(
DateTime time
)
例如:
var tz = TimeZone.CurrentTimeZone;
var is_dst = tz.IsDaylightSavingTime(DateTime.Now);
有关详细信息,请参阅MSDN。
答案 2 :(得分:2)
是的,有一个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