我有一个字符串日期,没有时间信息。 例如:"20131031" 即) 2013年10月31日。
我想验证它是否是夏令时发生的日期? 相对于西欧。
即) C# 是否有 API 来判断它是否是夏令时日期? 我只想要一个布尔值作为返回结果,分别对应十月份的最后一个星期日和三月份的最后一个星期日。 这些是时钟调整的日期。
根据MSDN文档,请注意:
重要提示
尽可能使用
TimeZoneInfo
类,而非TimeZone
类。
应该考虑TimeZone
已被弃用。
相反,您可以像这样检查本地时区的夏令时:
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获取更多相关信息。
是的,有一个API:TimeZone.GetDaylightChanges
http://msdn.microsoft.com/en-us/library/system.timezone.getdaylightchanges.aspx
你提供一个年份,它会返回一个DaylightTime对象,其中包含夏令时开始和结束的日期。然后,你可以将你的日期与这两个日期进行比较,以确定它是否是夏令时日期。
尽管这个答案已经被接受,但请参见Matt Johnson下面的答案,了解为什么它不是最好的答案,以及应该使用TimeZoneInfo类的详细信息。https://dev59.com/HnjZa4cB1Zd3GeqPbj-g#19523173
TimeZone
类。 - Matt Johnson-PintTimeZoneInfo
类来替代TimeZone
。MSDN明确建议不再使用TimeZone
。有关详细信息,请参见我的答案。 - Matt Johnson-Pint
TimeZone
类。 - Matt Johnson-Pint