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



我有一个日期作为字符串。没有时间信息。例如。"20131031"即)31 Oktober 2013。

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

即)c#是否有API,说它是DST日期与否?我想要一个布尔值作为回报,用于 10 月的最后一个星期日和 3 月的最后一个星期日。哪些是调整时钟的日期。

根据 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

是的,有一个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

最新更新