5

任何人都可以帮助理解这一点。Microsoft 在 3.5 中的 TimeZoneInfo 类告诉我以下 GMT 日期不是东部时区的夏令时,但它是。

// Get Eastern Timezone
TimeZoneInfo tzEasternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

// Convert to EST 
DateTime easternTime = TimeZoneInfo.ConvertTime(DateTime.Parse("2009-11-01T05:00:00Z"), tzEasternZone);

// Daylight saving IS in effect on this date, but Microsoft doesn't think so
Boolean isDaylight = easternTime.IsDaylightSavingTime();

这里有 2 个网站说它是夏令时:
http ://www.timeanddate.com/worldclock/converted.html?month=11&day=1&year=2009&hour=5&min=0&sec=0&p1=0&p2=
198 http://www. timezoneconverter.com/cgi-bin/tzc.tzc

4

3 回答 3

6

请参阅:TimeZoneInfo.IsDaylightSaving

因为 TimeZoneInfo.IsDaylightSavingTime(DateTime) 方法可以为不明确的日期和时间(即可以表示特定时区中的标准时间或夏令时的日期和时间)返回 false,所以 TimeZoneInfo. IsAmbiguousTime(DateTime) 方法可以与 IsDaylightSavingTime(DateTime) 方法配对,以确定时间是否可能是夏令时。因为模棱两可的时间既可以是夏令时也可以是标准时间...

你也可以看看这个...

TimeZoneInfo.GetAmbiguousTimeOffsets 方法

返回有关可以将不明确的日期和时间映射到的可能日期和时间的信息。

于 2011-02-14T04:00:53.917 回答
5

这将起作用:

TimeZoneInfo tzEasternZone = TimeZoneInfo.FindSystemTimeZoneById(
                                          "Eastern Standard Time");

DateTime utc = DateTime.Parse("2009-11-01T05:00:00Z",
                              CultureInfo.InvariantCulture,
                              DateTimeStyles.RoundtripKind);

bool isDaylight = tzEasternZone.IsDaylightSavingTime(utc);

原始代码有两个问题:

  • 即使提供了 UTC 值,它也会在Parse语句中转换为本地类型。所以这里可能会引入歧义。

  • 如果种类是本地的或未指定的,则类上的IsDaylightTime方法将假定本地时区。DateTime调用后ConvertTime,结果是未指定的种类,所以它是在检查当地时区的规则,而不是东部时区。

于 2013-10-13T17:40:14.257 回答
2

TimeZoneInfo.GetUtcOffset(DateTime)

如果指定日期在期间内,则正确返回考虑夏令时的偏移量

于 2012-08-20T11:51:34.740 回答