如何检查给定日期是否为夏令时日期?

6

我有一个字符串日期,没有时间信息。 例如:"20131031" 即) 2013年10月31日。

我想验证它是否是夏令时发生的日期? 相对于西欧。

即) C# 是否有 API 来判断它是否是夏令时日期? 我只想要一个布尔值作为返回结果,分别对应十月份的最后一个星期日和三月份的最后一个星期日。 这些是时钟调整的日期。

3个回答

9

根据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 可能更好。

5

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

public virtual bool IsDaylightSavingTime(
    DateTime time
)

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

请访问MSDN获取更多相关信息。


啊,这比我的答案还要好。 :) - David Arno
IsDayLightSavingTime()函数提供了指定日期和时间是否在夏令时期间的信息。但我想知道夏令时的开始和结束时间。David的建议对我很有帮助。 - user1872757
1
@user1872757 但你最初并没有问到这个问题。 - Lloyd
1
请不要推荐使用TimeZone类。 - Matt Johnson-Pint
@MattJohnson 哦,有趣,我没有看到这些注释,我很久没有使用它了,我只知道它的存在。 - Lloyd

2

是的,有一个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-Pint
@MattJohnson,你能澄清一下那个声明吗? - David Arno
微软创建了TimeZoneInfo类来替代TimeZone。MSDN明确建议不再使用TimeZone。有关详细信息,请参见我的答案。 - Matt Johnson-Pint
@MattJohnson,谢谢,我不知道这一点。我已经相应地更新了我的答案并赞同了你的答案。 - David Arno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接