2010-03-24 198 views
1

我有一個字符串是UTC,並想將其轉換爲NSDate。如何將UTC日期轉換爲NSDate?

static NSDateFormatter* _twitter_dateFormatter; 
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"]; 
[_twitter_dateFormatter setLocale:_en_us_locale]; 

NSDate *d = [_twitter_dateFormatter dateFromString:sDate]; 

當我經過調試d是零,即使SDATE是「2010-03-24T02:35:57Z」

不完全知道我在做什麼錯。

+0

也只是一個小小的挑剔:d在調試器中爲零不* d(你不能解引用空指針)。 – 2010-03-24 02:46:05

+0

其實,你的字符串不是「UTC」。您的'sDate'字符串值是標準格式(RFC 3339或ISO 8601),表示正好處於Zulu(UTC)時區(最後的'Z')的日期時間。 – 2012-09-29 21:32:12

回答

3

同樣在需要分配/ init你的NSDateFormatter對象,但你也有另一個問題:你的日期格式字符串不符合你給它的實際日期。

"EEE MMM dd HH:mm:ss ZZZ yyyy" 
- vs - 
"2010-03-24T02:35:57Z" 

這格式字符串會匹配這樣的:

"Wed Mar 24 00:07:33 -0400 2010" 

的日期格式字符串的含義見unicode standard

+0

感謝您指出不匹配。我不知道如何格式化字符串像「2010-03-24T02:35:57Z」 – 2010-03-24 05:06:01

+0

類似的問題http://stackoverflow.com/questions/1263455/nil-nsdate-when-trying-to- get-date-from-utc-string-in-zulu-time 尤其要注意的是,你可能想用輸入字符串中的最後一個「Z」替換爲明確的數字時區(-0000) – 2010-03-24 05:14:00

+0

謝謝!在我的情況下,日期格式應該是yyyy-MM-dd'T'HH:mm:ssZ用(-0000)替換Z取得了訣竅。 – 2010-03-24 05:31:39

1

您沒有分配或初始化您的NSDateFormatter對象。

嘗試這樣:

NSDateFormatter* _twitter_dateFormatter = [[NSDateFormatter alloc] init]; 
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"]; 
[_twitter_dateFormatter setLocale:_en_us_locale]; 

NSDate *d = [_twitter_dateFormatter dateFromString:sDate]; 
[_twitter_dateFormatter release]; 

它也不清楚爲什麼要爲靜態聲明_twitter_dateFormatter。如果您試圖避免重新分配,請將其作爲您班級的一名ivar。

0

Apple給出Parsing an RFC 3339 date-time的源代碼。如果使用ARC,您可能需要通過刪除對「autorelease」的調用來調整該源。

FYI RFC 3339ISO 8601one deviation的一個子集(在RFC 3339中允許負零偏移量)。因此,Apple的代碼一舉兩得,處理所謂的「互聯網風格」RFC 3339日期時間以及ISO 8601的簡單日期時間。