【问题标题】:How to check whether a given date is DST date or not?如何检查给定日期是否为 DST 日期?
【发布时间】:2013-10-31 01:32:26
【问题描述】:

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

我想验证是否是 DST 发生的日期? w.r.t.西欧。

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

【问题讨论】:

    标签: c# dst


    【解决方案1】:

    MSDN Documentation

    重要

    尽可能使用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

    【讨论】:

      【解决方案2】:

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

      public virtual bool IsDaylightSavingTime(
          DateTime time
      )
      

      例如:

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

      更多信息请参见MSDN

      【讨论】:

      • 啊,这比我的回答还要好。 :)
      • IsDayLightSavingTime() 提供指定的日期和时间是否在夏令时期间。但我想知道夏令时的开始和结束时间。大卫的建议对我有帮助。
      • @user1872757 你最初并没有问这个问题。
      • 请不要推荐TimeZone类。
      • @MattJohnson 啊哈有趣我没看到笔记,我好久没用了,我只知道它存在。
      【解决方案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

      【讨论】:

      • 请不要推荐TimeZone类。
      • @MattJohnson,你能澄清一下这个说法吗?
      • Microsoft 创建了TimeZoneInfo 类来替换TimeZone。 MSDN 明确建议不要再使用TimeZone。详情见我的回答。
      • @MattJohnson,谢谢,我不知道。我已经相应地更新了我的答案,并对你的答案投了赞成票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      相关资源
      最近更新 更多