• S
    Fix Incorrect UTC offset during DST transition (case 1288231) · 80ed0174
    Scott Ferguson 提交于
    Corrects an issue where for the hour after the DST transition, the
    local UTC offset was listed.  The UTC offset was the DST offset
    instead of the standard time offset.
    
    The runtime library captures this an ambiguous time.  That is
    the local time that occurs twice - once in DST then once in standard
    time.  If DST is an extra 1:00 a.m. offset and ends at 2:00 a.m., 1:00 a.m.
    to 1:59:59.9999.... occurs twice.  First in DST then again in standard
    time.
    
    The classlibs had this incorrect - they did not consider 1:00 a.m. an
    ambiguous time, and considered 2:00 a.m. ambiguous.  However it should
    be reversed.  1:00 a.m. occurs twice, but 2:00 a.m. only occurs once.
    The instance we would hit 2:00 a.m. DST, we instantaneous switch to
    1:00 a.m. standard.
    
    The classlibs were also not recording enough information to record
    which side of DST a local time was.  When converting a time from UTC,
    or using DateTime.Now an internal flag, IsAmbiguousDaylightSavingTime,
    should be set if the time is an ambiguous local time that is on the
    DST side of the transition.  The classlibs were calling
    TimeZone.IsAmbigousTime which has a wider defintion for ambiguous
    time that the IsAmbiguousDaylightSavingTime should have.  It returns
    true for local times on either side of DST.  So a new method
    IsAmbiguousLocalDstFromUtc was added to check this case.
    
    The classlibs were also not checking the IsAmbiguousLocalDstFromUtc
    flag when getting the UTC offset for a local time.  So a check
    was inserted in two locations to correct for that.
    
    Some tests has to be updated to reflect these new definitions of when
    DST starts and ends and which times are ambiguous.  These also account
    for some test changes required by cherry-picked changes to
    TimeZoneInfo.cs where the corresponding test changes were not
    cherry-picked.  Some of those changes where in PR's that updated to
    the CoreFx TimeZoneInfo class.
    
    All these changes have been verified against the behavior of the
    .Net Framework and they match.
    
    Fix case 1288231:
    Mono: Fix incorrect UTC offset during daylight savings time transitions
    80ed0174
TimeZoneInfoTest.cs 86.0 KB