NSDateFormatter fails to convert string to date when string is a date 24 hours after a winter to summer timezone transition

Originator:dave.evans55
Number:rdar://18199442 Date Originated:2-sep-2014
Status:open Resolved:no
Product:OS X Product Version:l10.11 and earlier
Classification: Reproducible:yes
 
n the Europe/London timezone, for some years and times 24 hours after t winter to summer time transition, NSDateFormatter fails to convert a valid date string to an NSDate

source code follows the test results

Expected Results:
I expect to see a non-nil NSDate

Actual Results:
======= Begin Test
Comment: This should work - just an ordinary date
date to convert: 7aug14 20:12
result: 2014-08-07 19:12:00 +0000
======= Begin Test
Comment: This should return nil -daylight saving transition
date to convert: 27mar94 01:00
result: (null)
 ======= Begin Test
Comment: This should work (but fails)- 24 hours after transition
date to convert: 28mar94 01:00
result: (null)
======= Begin Test
Comment: This should work (and it does) - 24 hours after another transition
date to convert: 31mar14 01:00
result: 2014-03-31 00:00:00 +0000


Source code:
================ cut here ===================

// Command line tool to illustrate NSDateFormater dateFromString bug
// when processing dates 24 hours after a transition from 
// standard time to daylight saving time.

// Author: David Evans 
// Email: dave.evans55@googlemail.com
// Date: Tue 2 September 2014
// Compiled without ARC

#include <Foundation/Foundation.h>

void testone(NSString * comment, NSString * aDate){


  NSDateFormatter *df = [[NSDateFormatter alloc ]  init];
  NSLocale *enUSPOSIXLocale = [[NSLocale alloc] 
                                  initWithLocaleIdentifier:@"en_US_POSIX"];
  [df setLocale:enUSPOSIXLocale];
  [df setDateFormat: @"ddMMMyy HH:mm" ];
  [df setTimeZone: [NSTimeZone timeZoneWithName:@"Europe/London"]];
  NSLog(@"======= Begin Test");
  NSLog(@"Comment: %@", comment);
  NSLog(@"date to convert: %@", aDate);
  NSLog(@"result: %@", [[df dateFromString:aDate] description]);
  [enUSPOSIXLocale release];
  [df release];
  return;

}

int main(){
  @autoreleasepool {
    testone(@"This should work - just an ordinary date",
            @"7aug14 20:12");
    testone(@"This should return nil -daylight saving transition",
            @"27mar94 01:00");
    testone(@"This should work (but fails)- 24 hours after transition",
            @"28mar94 01:00");
    testone(@"This should work (and it does) - 24 hours after another transition",
            @"31mar14 01:00");

  } 
}
============== cut here ==============

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!