任何人都可以帮助理解这一点。微软在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
答案 0 :(得分:5)
请参阅:TimeZoneInfo.IsDaylightSaving
因为 TimeZoneInfo.IsDaylightSavingTime(DATETIME) 方法可以为日期返回false 时间不明确(即a 可以代表的日期和时间 无论是标准时间还是日光 节省特定时间的时间 区), TimeZoneInfo.IsAmbiguousTime(DATETIME) 方法可以配对 IsDaylightSavingTime(DateTime)方法 确定一个时间是否可以 夏令时。因为一个 模棱两可的时间可以是两者兼而有之 夏令时和标准 时间...
你也可以看看......
TimeZoneInfo.GetAmbiguousTimeOffsets Method
返回有关可以映射到模糊日期和时间的可能日期和时间的信息。
答案 1 :(得分:4)
这将有效:
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
之后,结果具有未指定的种类,因此它检查的是当地时区的规则,而不是东部时区。
答案 2 :(得分:1)
TimeZoneInfo.GetUtcOffset(DateTime)
如果指定的日期在期间
内,则正确地返回带有夏令时的偏移量