NSDateFormater dateFromString:

shi*_*lpa 2 iphone nsdateformatter ios4

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"]
Run Code Online (Sandbox Code Playgroud)

在4.0 IOS上面的代码即str是nill,在3.0 IOS上这个工作正好是2008-12-31.如何克服这个问题?

Dan*_*Ray 13

看起来您想要将日期从一种字符串格式转换为另一种字符串格式.为此,您必须分两步完成 - 将FROM字符串格式化为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];
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以通过读取,重置dateFormat然后写入来使用一个日期格式化程序获得相同的结果.我刚刚这样做了,所以很容易看到这个过程.

旁注 - 我总是忘记发布NSDateFormatters.Clang和Instruments总是让我泄漏它们.我想我会使用它们,感觉它们已经完成了.但他们不是!所以要比我更聪明,并记住你的内存管理NARC!

附注2 - 不要忽略编译器警告.您的编译器会警告您正在执行的无效任务,而您却忽略了这一点.