2011-01-10 46 views
2
NSDateFormatter *isoDateFormatter = [NSDateFormatter new]; 
[isoDateFormatter setDateFormat:@"yyyy-MM-dd"]; 
[isoDateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
[isoDateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
NSString * str = [isoDateFormatter dateFromString:@"2008-12-31T12:00:00"] 

on 4.0 IOS上面的代码即str是nill,在3.0 IOS上这个工作正常,是2008-12-31。 如何解决这个问题?NSDateFormater dateFromString:

+0

事实上,这在iOS 3上工作比一个功能更多的bug,因为dateFromString:不会返回一个NSString,而是一个NSDate。你的编译器甚至会告诉你一个警告。阅读它们。 – fresskoma 2011-01-10 13:12:55

+0

副本http://stackoverflow.com/questions/3212214/for-iphone-os-4-0-datefromstring-method-of-nsdateformatter-returns-nil – 2011-01-10 13:26:28

回答

3

dateFromString: 返回使用接收者的当前设置解释的给定字符串的日期表示形式。

- (NSDate *)dateFromString:(NSString *)string 

参数 串 解析字符串。 返回值 使用接收方的当前设置解释的字符串的日期表示形式。

供货情况 适用于iOS 2.0及更高版本。 请参见

– getObjectValue:forString:range:error: 
– stringFromDate: 

相关示例代码 Urlcache文件 宣布

NSDateFormatter.h 

阅读docs

dateFromString返回一个Date对象而不是NSString。

+3

+1为什么地狱是这样被拒绝的?... – fresskoma 2011-01-10 13:10:27

13

它看起来像你想将一个日期从一个字符串格式转换为另一个。要做到这一点,你必须分两步执行 - 将字符串格式化为NSSDate,然后从该日期格式化为NSString。

NSDateFormatter *dateWriter = [[NSDateFormatter alloc] init]; 
NSDateFormatter *dateReader = [[NSDateFormatter alloc] init]; 
[dateWriter setDateFormat:@"yyyy-MM-dd"]; 
[dateReader setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

NSDate *dateTmp = [dateReader dateFromString:@"2008-12-31T12:00:00"]; 
NSString *str = [dateWriter stringFromDate:dateTmp] 
//str now contains "2008-12-31". 

//and don't forget!!! 
[dateReader release]; 
[dateWriter release]; 

你可以通过阅读,重置日期格式,然后写,如果你想达到一个日期格式相同的结果。我只是把它摆出来,所以很容易看到这个过程。

备注 - 我总是忘记发布NSDateFormatters。 Clang和乐器总是让我泄漏他们。我想我使用它们,感觉就像他们完成了。虽然他们不是!因此,比我更聪明,记住你的记忆管理NARC

备注2 - 不要忽略编译器警告。你的编译器会警告你你正在做的无效赋值,而你忽略了这一点。