2011-06-29 23 views
2

我從一個Web服務得到一個可以追溯到形式MM00yyyy - 它僅僅是兩位數的月份,後面兩個0的,然後四位數年份。當我這樣做:無所獲從NSDateFormatter 0的格式字符串

NSString *expDate = @"12001975"; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"MM00yyyy"]; 
NSDate postDate = [dateFormat dateFromString:expDate]; 

[dateFormat dateFromString]回報nil出於某種原因。我也試過MMddyyyyMM'0''0'yyyy,但沒有任何成功。我正在轉換一個類似的日期,除了0實際上是使用相同方法沒有問題的日子。

回答

5

得到這個工作,我只想用以下模式MMHHyyyy。由於您只需要日期而不是必需的時間,HH將使用00將時間設置爲第0小時,因此您將得到您正在查找的日期。再次,這只是一個黑客和解決方法,只爲解決您當前的問題。

+0

+1聰明。 (該任擇議定書應該確保不插入註釋解釋自己在做什麼 - 我們希望在代碼中的下一個人是完全糊塗了。) –

+0

的確是一個聰明的解決方案,很好的思考 –

0

正確獲取格式字符串似乎比科學更像藝術。我建議你製作一個沒有00的新字符串,然後用「MMyyyy」製作你的DateFromatter程序。

雖然這可能不是「正確」的方式做到這一點,就應該很快解決您的問題。

2

查看Apple的Date Formatting Guide。 「使用格式字符串指定自定義格式」部分列出了各種iOS版本支持的用於指定格式字符串的所有不同標準。我會說「00」是不允許的,所以這就是「MM00yyyy」失敗的原因。同樣,「MMddyyyy」也失敗了,因爲沒有一天可以成爲「00」。

我不知道你是否能有更多的運氣與UNIX功能,如蘋果的文檔表明:

日期和時間在一個固定的,未經定位格式,即始終保證使用相同的日曆,使用標準C庫函數strptime_l和strftime_l有時可能更容易和更高效。

要知道,C庫還具有當前語言環境的想法。爲了保證固定的日期格式,你應該傳遞NULL作爲這些例程的loc參數。這將導致它們使用POSIX語言環境(也稱爲C語言環境),該語言環境相當於Cocoa的en_US_POSIX語言環境,如本例所示。

struct tm sometime; 
const char *formatString = "%Y-%m-%d %H:%M:%S %z"; 
(void) strptime_l("2005-07-01 12:00:00 -0700", formatString, &sometime, NULL); 
NSLog(@"NSDate is %@", [NSDate dateWithTimeIntervalSince1970: mktime(&sometime)]); 
// Output: NSDate is 2005-07-01 12:00:00 -0700 
+0

我希望在年底「0''0」或「00」的工作,因爲這應該只是一個文字匹配,然而,無論這些模式的工作 –