任何人都可以帮助理解这一点.微软在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();
Run Code Online (Sandbox Code Playgroud)
这里有两个网站说它是夏令时:http://www.timeanddate.com/worldclock/converted.html?month = 11&day = 1&year = 2009&time = 5&min
= 0&sec = 0&p1 = 0&p2 =
198 http:// www. timezoneconverter.com/cgi-bin/tzc.tzc
请参阅:TimeZoneInfo.IsDaylightSaving
因为TimeZoneInfo.IsDaylightSavingTime(DateTime)方法可以为不明确的日期和时间(即,可以表示特定时区中的标准时间或夏令时的日期和时间)返回false,即TimeZoneInfo. IsAmbiguousTime(DateTime)方法可以与IsDaylightSavingTime(DateTime)方法配对,以确定时间是否可以是夏令时.因为模糊的时间可以是夏令时和标准时间......
你也可以看看......
TimeZoneInfo.GetAmbiguousTimeOffsets方法
返回有关可以映射到模糊日期和时间的可能日期和时间的信息.
这将起作用:
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);
Run Code Online (Sandbox Code Playgroud)
原来的代码有两个问题:
即使提供了 UTC 值,它也会在Parse语句中转换为本地类型。因此可能会在那里引入歧义。
如果类型是本地时区或未指定,则IsDaylightTime该类上的方法将采用本地时区。DateTime调用后ConvertTime,结果类型未指定,因此它根据当地时区的规则进行检查,而不是东部时区的规则。