NSDateFormatter为特定日期返回null

我遇到了NSDateFormatter的问题。 它在某些特定日期返回null

我做了这个function来调试案例:

 - (void) debugTest:(NSString *)dateStr{ NSLog(@"String: %@", dateStr); NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"yyyy-MM-dd"]; NSDate *dateObj = [df dateFromString: dateStr]; NSLog(@"Date: %@", dateObj); } 

这是我某些日期的日志输出:

 String: 2012-10-18 Date: 2012-10-18 03:00:00 +0000 String: 2012-10-19 Date: 2012-10-19 03:00:00 +0000 String: 2012-10-20 Date: 2012-10-20 03:00:00 +0000 String: 2012-10-21 Date: (null) String: 2012-10-22 Date: 2012-10-22 02:00:00 +0000 String: 2012-10-23 Date: 2012-10-23 02:00:00 +0000 

为什么它仅在2012-10-21返回null?

我在2011-10-01 to 2014-11-01期间进行了其他测试,并且以下日期返回null

 2011-10-16, 2012-10-21, 2013-10-20, 2014-10-19 

这是某种错误吗? 我做错了什么?

我会回答我自己的问题只是为了注册以防有人得到同样的问题:

我添加到我的日期格式化程序[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; AND [df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

所以,我的新代码是:

 - (void) debugTest:(NSString *)dateStr{ NSLog(@"String: %@", dateStr); NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; [df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [df setDateFormat:@"yyyy-MM-dd"]; NSDate *dateObj = [df dateFromString: dateStr]; NSLog(@"Date: %@", dateObj); } 

我认为问题与设备的配置有关,设置这两个属性解决了问题。