6

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

我想验证它是否是 DST 发生的日期?wrt西欧。

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

4

3 回答 3

9

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

于 2013-10-22T16:17:22.160 回答
5

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

public virtual bool IsDaylightSavingTime(
    DateTime time
)

例如:

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

有关详细信息,请参阅MSDN

于 2013-10-22T09:07:09.360 回答
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

于 2013-10-22T09:06:28.657 回答