2012-06-22 86 views
2

我只是簡直無法弄清楚如何設置NSDateFormatter日期格式,所以[formatter dateWithString:]不返回零。NSDateFormatter iOS,日期模式

日期如下所示:

2008-08-18T14:32:22.1875000 + 01:00

我試圖

formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.fffffffzz+GMT"]; 

似乎不工作:(。任何建議,請幫助。

好的謝謝你的回答,好像我誤導了人們w有一點我的問題,所以我試圖重新說明它,對此抱歉,也許它稍晚編程。我需要一個日期包裝對象,所以我不必自己解析包含日期的字符串。基本上我從我需要解析的數據庫中獲得一個字符串,我可以在我的UI中使用它。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; 
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"]; 
NSLog(@"%@", date); 

,打印零

我要的是NSString-> NSDat,這樣我就可以問它也許它所包含的一個月,或它所包含的時間。我現在看到NSDate沒有這樣的方法。這是一個愚蠢的假設。任何想法,現在?

回答

8

根據unicode documentation沒有f。假設你想要亞秒,那應該是S。如果您希望以字面方式傳輸,則還需要將引號中的T加上引號。我認爲你也對z感到困惑,並且可能想要ZZZZ而不是zz + GMT。所以:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; 
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); 

QA1480,你可能還需要明確設置的en_US_POSIX語言環境,如果你想產生用於存儲的技術字符串。如果您想顯示字符串,它保留根據當前語言環境調整您的請求字段的權利。所以那會是:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; 
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); 

根據ctrahey的回答,這並不完全符合你想要的格式,最終在例如。

012-06-22T16:44:32.9310000GMT-07:00 

即字母'GMT'已經在那裏cre手cre腳。切換到單個Z將擺脫對GMT的顯式引用,但也會刪除冒號。

編輯:根據您的示例代碼:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; 
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"]; 
NSLog(@"%@", date); 

失敗,因爲你的輸入字符串不匹配所提供的日期格式 - 缺少字母GMT前+01:00。由於似乎沒有一個與數據庫中的數據完全匹配的unicode日期字符串,可能最簡單的方法就是刪除冒號。例如。我想輸出2008-08-18 13:32:22 +0000

+0

我更新了問題,所以也許你現在可以幫助我:D另外爲什麼你autoreleasing對象?我正在使用ARC,所以我不需要這樣做,對吧? – foFox

+0

@foFox,正確。你不需要(並且實際上**不能**)在ARC代碼中使用'autorelease'。但是,由於各種原因,有些人仍然需要使用非ARC代碼。 – Nate

+0

非常感謝你!作品! – foFox

1

我能得到的只是省去了結腸中區附近結束偏移最接近:

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"]; 

,看起來像這樣:2012-06-22T16:40:46.6290000-0700

的我正在使用的文檔is here,因爲鏈接from Apple

+0

這似乎並不工作:(我得到NSDate的nils – foFox