2013-10-22 91 views
1

我有這樣的字符串:「星期二,2013年10月22日下午1點59 EEST」 我試圖設置這些解析規則:解析的NSString的NSDate使用NSDateFormatter

[formatter setDateFormat: @"EEE, dd MMM yyyy hh:mm a z"]; 

但這返回nil當我執行:

[formatter dateFromString: @"Tue, 22 Oct 2013 1:59 pm EEST"]; 

什麼是這種格式正確的正則表達式?

+0

只是給小費,也不會解決您的問題,您應該設置本地的dateformatter的英語。因爲如果你的iOS設備被設置爲英文,你的日期格式化將會失敗。 – rckoenes

+2

[Nsdateformatter + Timezone issue]的可能重複(http://stackoverflow.com/questions/18763420/nsdateformatter-timezone-issue) – rckoenes

+1

是的,這可能是一個區域設置問題。由於您使用的是英文術語,因此您應該使用英文/美國語言環境。 –

回答

4
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"EEE, dd MMM yyyy hh:mm a zzz"]; 
    [formatter setLocale:locale]; 
    NSDate* date = [formatter dateFromString:@"Tue, 22 Oct 2013 1:59 PM EEST"]; 
    NSLog(@"date: %@",date); 

O/P:-date: 2013-10-22 10:59:00 +0000 
1

hh是軟墊小時(「01」,在你的情況),但你的字符串沒有軟墊小時(只是「1」),所以它應該是公正,而不是h

您可以在下面看到不同格式組件的實際示例(從this GitHub gist輸出)。被格式化的日期是1987-08-27 15:24:03

format result 
-------------- 
    yy 87 
    yyyy 1987 
    M 8 
    MM 08 
    MMM Aug 
    MMMM August 
    dd 27 
    HH 15 
    hh 03 // <--. 
    h 3  // <--'--- note the difference 
    a PM 
    mm 24 
    m 24 
    ss 03 
    s 3