2010-07-09 71 views
8

我使用下面的代码&其工作在iPhone OS 3.2对于iPhone OS 4.0“dateFromString” NSDateFormatter的方法返回零

+(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是零。

其原因是:

为NSDateFormatter

- (id)init方法通过iPhone OS 3.2是仅可用于iPhone OS 2.0。 它在iPhone OS 4.0中已弃用。

现在有什么解决方案呢?如何启动NSDateFormater?有什么选择?

+0

我们可以使用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 2010-07-09 11:54:23

+3

但是,现在如何处理NSDateFormatter?我们不能在IPhone OS 4.0中使用它吗?如果是,那么如何? – Rambo 2010-07-09 11:55:35

+1

只是因为它被弃用并不意味着它不会工作 - 它可能在未来不会工作。如果你__NSLog(@“%@”,dateFormatter); __你调用init之后你会得到什么?如果你没有得到零,这个警告是无关你的问题。 – deanWombourne 2010-07-09 12:45:45

回答

2

- (id)init不适用于iOS4中的NSDateFormatter。这是文档中的错误。

+0

我在想这一定是这种情况 - 苹果开发人员论坛上的任何地方都记录了这一点吗? – 2010-08-17 06:30:28

2

[NSDateFormatter dateFormatFromTemplate:选项:区域:]可能会更好地工作

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

// “M/DH:毫米” //美国英语格式返回美国地区

[dateFormatter setDateFormat:format]; 
NSDate *date = [dateFormatter dateFromString:dateString]; 
2

在iOS2.x和3.x的NSDate描述/ datefromstring函数返回: 2010-09-24 17:30:00 - 0700

在iOS 4.1中它返回这个: 2010- 09-25 00:30:00格林尼治标准时间

您可以提交一个bug给苹果。它甚至不遵循规定它应该返回0000的偏移量。所以它不仅不会返回本地日期,还会使用GMT而不是偏移量。看来这种新格式与NSDateFormatter方法不兼容。

此外,我不认为这是在文档中的错误。在API Diff文档中,它列出为NSDateFormatter删除init。

+0

如果您将您的设备配置从24小时制更改为12小时制,结果会更加令人困惑:S – 2011-01-14 17:09:53