2012-10-01 71 views
6

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

我没有这个功能调试的情况:

- (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回来?

我做了间隔等检查从2011-10-01 to 2014-11-01和下面的日期返回null

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

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

+0

相关? http://stackoverflow.com/a/4265130/343955 – adarshr

+0

我试着解决其他问题,但没有为我工作。我认为问题是不同的。 – Rafael

+0

代码工作正常。这是列表之外的事情。我预计这个字符串已经超出了范围。请张贴其余的测试代码。 – madmik3

回答

4

我会回答我的问题只是在有人的情况下,登记获得了同样的问题:

我加入到我的日期格式 [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];[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); 

} 

我认为这个问题是有关设备的配置,设置两个属性固定的问题。

+0

它没有为我工作。我仍然得到部分结果。一些空值和一些日期字符串。你是如何使它工作的? – AJ112

+0

我做了正确的事情,我发布和为我工作。但是我很久以前就这样做了,所以我不知道在最新的iOS版本中这是否仍然有效,可能是有所改变。 – Rafael