2010-07-09 37 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

相關問題