iPhone OS 4.0中,NSDateFormatter的"dateFromString"方法返回nil。

8

我正在使用以下代码,在iPhone OS 3.2上运行得非常完美

+(NSDate *)NSDateFromString:(NSString *)dateString
{

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *dateObj=[dateFormatter dateFromString:dateString];
    [dateFormatter release], dateFormatter=nil;
    return dateObj;
}

但是,当我尝试在iPhone OS 4.0上使用相同的代码时,dateObj为nil。

原因是:

- (id)init方法只能在iPhone OS 2.0至iPhone OS 3.2中使用NSDateFormatter。

它在iPhone OS 4.0中已被弃用。

那么现在该怎么办?如何初始化NSDateFormater?有什么替代方案吗?


我们可以使用NSDateComponents将NSString转换为NSDate,例如:NSDateComponents *comps = [[NSDateComponents alloc] init];[comps setDay:6];[comps setMonth:5];[comps setYear:2004];NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];NSDate *date = [gregorian dateFromComponents:comps];[comps release]; - Rambo
3
现在该怎么处理NSDateFormatter?我们不能在iPhone OS 4.0中使用它吗?如果可以,那要怎么做? - Rambo
1
仅仅因为某个方法已经被弃用并不意味着它不能使用 - 只是可能在未来无法使用。如果你在调用 init 方法之后使用 __NSLog(@"%@", dateFormatter);__,你会得到什么?如果你没有得到 nil,那么这个警告与你的问题无关。 - deanWombourne
这是一个非常常见的问题,请查看之前的答案,看看它们中是否有解决您问题的方法。 - progrmr
1
NSDate *dateObj=[dateFormatter dateFromString:dateString];如何才能得到正确的输出而不是“nil”? - Rambo
显示剩余2条评论
3个回答

2
< p > [NSDateFormatter dateFormatFromTemplate:options:locale:]可能更好地发挥作用

NSString *format = [NSDateFormatter
                   dateFormatFromTemplate:@"Mdjm"
                                  options:0
                                   locale:[NSLocale currentLocale]];

// “M/d h:mm a” // 返回美国本地化的美式英语格式

(该格式与日期和时间相关,用于IT技术)
[dateFormatter setDateFormat:format];
NSDate *date = [dateFormatter dateFromString:dateString];

2

- (id)init在iOS4中对于NSDateFormatter并没有被弃用。这是文档中的错误。


我认为这一定是这样的 - 这在苹果开发者论坛等地方有记录吗? - Daniel Dickison

2
在iOS 2.x和3.x中,NSDate的description/datefromstring函数返回:2010-09-24 17:30:00 -0700。
在iOS 4.1中,它返回:2010-09-25 00:30:00 GMT。
你可以向苹果提交一个错误报告。它甚至不遵循规范,规范规定应该返回0000作为偏移量。因此它不仅没有返回本地日期,而且使用GMT而不是偏移量。看起来这种新格式与NSDateFormatter方法不兼容。
此外,我认为这并不是文档中的错误。在API Diff文档中,它列出了NSDateFormatter的init已被删除。

更令人困惑的是,如果您将设备配置从24小时制更改为12小时制,则结果会有所不同:S - The WebMacheter

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