dateFromString返回空值

5
这是我的NSString
myDate : 2011-06-07 11:23:47  0000

以下是代码:

NSTimeZone *currentDateTimeZone = [NSTimeZone defaultTimeZone];
NSDateFormatter *currentDateFormat = [[NSDateFormatter alloc]init];
[currentDateFormat setTimeZone:currentDateTimeZone];
[currentDateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *tempDate = [currentDateFormat dateFromString:second];

仍然 tempDate 的值是 nil
有人可以帮忙吗?

4个回答

3

你是怎么得到这个日期字符串的?为了使它起作用,它需要是2011-06-07 11:23:47 +0000


+1,但为什么必须是+0000。0000不是应用程序必须返回nil的原因,我认为! - Viktor Apoyan
但这不能成为 tempDate 获取空值的原因。 - Viktor Apoyan
1
dateFromString: 方法接收到一个不符合日期格式的字符串时,它返回什么? - Deepak Danduprolu
@ViTo - 不仅可能是原因,而且就是原因。Z格式要求在0000前面加上“+”或“-”。如果没有这个符号,字符串就不符合格式,所以dateFromString:返回nil。 - David Gelhar
我刚刚将我的当前解析器设置为: yyyy-MM-dd HH:mm:ss +0000。 - mayuur
显示剩余3条评论

2
尝试一下, 这是一个从字符串中获取日期的函数。
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setFormatterBehavior:NSDateFormatterBehavior10_4];
[df setDateFormat:@"EEE, dd MMM yy HH:mm:ss"];
NSDate *convertedDate = [df dateFromString:stringDate];
[df release];
// [convertedDate description]
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setAMSymbol:@"AM"];
[formatter setPMSymbol:@"PM"];
[formatter setDateFormat:@"MM/dd/yyyy hh:mm:a"];
return [formatter stringFromDate:convertedDate];

1
我认为这与时区无关,而是设备的24小时设置有关。开发者需要检查设备时间是否为24小时制,如果是,则应使用HH,如果是12小时,则应使用hh。

0
NSTimeZone *currentDateTimeZone = [NSTimeZone defaultTimeZone];
NSDateFormatter *currentDateFormat = [[[NSDateFormatter alloc]init] *autorelease*];
[currentDateFormat setTimeZone:currentDateTimeZone];
[currentDateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss *ZZZZ*"];
NSDate *tempDate = [currentDateFormat dateFromString:second];

在代码中添加autoreleaseZZZZ,而不是Z。


添加autorelease。我有同样的问题,问题的原因是我没有使用autorelease。 - Viktor Apoyan
虽然缺少autorelease可能会导致内存泄漏(除非有其他未显示的release),但这与无法解析日期字符串的原因无关。在此代码中将“Z”更改为“ZZZZ”不会产生任何影响(请尝试!) - David Gelhar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接