【发布时间】:2016-02-16 21:36:42
【问题描述】:
2016 年东部标准时间的夏令时从 2016 年 3 月 13 日凌晨 2 点开始。此时时钟会调回凌晨 1 点,使凌晨 2 点无效。
此代码块针对 dateTime2 var 报告凌晨 2 点的错误。
TimeZoneInfo timeZoneInfo1;
timeZoneInfo1 = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var dateTime1 = TimeZoneInfo.ConvertTime(new DateTime(2016, 3, 13, 1, 0, 0), timeZoneInfo1);
var dateTime2 = TimeZoneInfo.ConvertTime(new DateTime(2016, 3, 13, 2, 0, 0), timeZoneInfo1); //Reports invalid date error
var dateTime3 = TimeZoneInfo.ConvertTime(new DateTime(2016, 3, 13, 3, 0, 0), timeZoneInfo1);
但是,在以下时区“太平洋 SA 标准时间”的示例中,1990 年的夏令时开始于 10/13/1990@11pm。这应该使 dateTime4 10/13/1990@11pm 成为无效的日期/时间。
相反,dateTime4 作为有效日期/时间返回。
此外,dateTime5 返回 10/14/1990@1am,自动跳过午夜。
dateTime6 返回 10/14/1990@2am 而不是我预期的 1am。
TimeZoneInfo timeZoneInfo2;
timeZoneInfo2 = TimeZoneInfo.FindSystemTimeZoneById("Pacific SA Standard Time");
var dateTime4 = TimeZoneInfo.ConvertTime(new DateTime(1990, 10, 13, 23, 0, 0), timeZoneInfo2); //10-14-1990@11pm
var dateTime5 = TimeZoneInfo.ConvertTime(new DateTime(1990, 10, 14, 0, 0, 0), timeZoneInfo2); //10-14-1990@1am
var dateTime6 = TimeZoneInfo.ConvertTime(new DateTime(1990, 10, 14, 1, 0, 0), timeZoneInfo2); //10-14-1990@2am
TimeZoneInfo.ConvertTime 有两种工作方式的原因是什么?
我正在使用 VS2010。
【问题讨论】: