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"]
4.0上的IOS上面的代码,即str是nill,在3.0 IOS上这个工作正好是2008-12-31。
如何克服这个问题?
答案 0 :(得分: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];
通过读取,重置dateFormat然后写入,您可以通过一个日期格式化程序获得相同的结果(如果需要)。我就是这样摆好的,所以很容易看到这个过程。
旁注 - 我总是忘记发布NSDateFormatters。 Clang和Instruments总是让我泄漏它们。我想我会使用它们,感觉它们已经完成了。但他们不是!所以要比我更聪明,记住NARC关于你的记忆管理!
附注2 - 不要忽略编译器警告。您的编译器会警告您正在执行的无效任务,而您却忽略了这一点。
答案 1 :(得分:3)
dateFromString: 返回使用接收者当前设置解释的给定字符串的日期表示。
- (NSDate *)dateFromString:(NSString *)string
参数 串 要解析的字符串。 回报价值 使用接收器的当前设置解释的字符串的日期表示。
状况 适用于iOS 2.0及更高版本。 另见
– getObjectValue:forString:range:error:
– stringFromDate:
相关示例代码 Urlcache文件 声明在
NSDateFormatter.h
阅读docs。
dateFromString返回Date对象而不是NSString。