2012-08-04 54 views
1

我需要的NSString轉換是這樣的:「2012-08-01T12:43:35 + 02:00」到NSDate的,但我沒有找到好的格式...如何將NSString轉換爲NSDate格式:「2012-08-01T12:43:35 + 02:00」?

我用這個類別代碼轉換的NSString的NSDate:

[NSDate dateFromString:@"2012-08-01T12:43:35+02:00" withFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"]; 

 

+ (NSDate*) dateFromString:(NSString*)dateString withFormat:(NSString*)format 
{ 
    return [self dateFromString:dateString withFormat:format andLocaleIdentifier:@"fr"]; 
} 

+ (NSDate*) dateFromString:(NSString*)dateString withFormat:(NSString*)format andLocaleIdentifier:(NSString*)localeIdentifier 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
    [dateFormatter setDateFormat:format]; 
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; 
    [dateFormatter setLocale:locale]; 
    [locale release]; 

    NSDate *returnDate = [dateFormatter dateFromString:dateString]; 
    [dateFormatter release]; 

    return returnDate; 
} 

我嘗試了所有的格式我可以,但沒有一個是正確的......

yyyy-MM-dd'T'HH:mm:ss >> 2012-08-04T18:05:14
yyyy-MM-dd'T'HH:mm:ssv >> 2012-08- 04T18:05:14France時間
YYYY-MM-dd'T'HH:MM:ssvv >> 2012-08-04T18:05:14GMT + 02:00
YYYY-MM-dd'T'HH :MM:ssvvv >> 2012-08-04T18:05:14GMT + 02:00
YYYY-MM-dd'T'HH:MM:SSV >> 2012-08-04T18:05:14CEST
yyyy-MM-dd'T'HH:mm:ssVV >> 2012-08-04T18:05:14GMT + 02:00
YYYY-MM-dd'T'HH:MM:ssVVV >> 2012-08-04T18:05:14GMT + 02:00
YYYY-MM-dd'T'HH:MM:ssVVVV >> 2012-08-04T18:05:14France時間
YYYY-MM-dd'T'HH:MM:SSZ >> 2012-08-04T18:05:14GMT + 02:00
YYYY-MM-DD 'T'HH:mm:sszz >> 2012-08-04T18:05:14GMT + 02:00
yyyy-MM-dd'T'HH:mm:sszzz >> 2012-08-04T18:05 :14GMT + 02:00
yyyy-MM-dd'T'HH:mm:sszzzz >> 2012-08-04T18:05 :14Central歐洲夏令時的
YYYY-MM-dd'T'HH:MM:SSZ >> 2012-08-04T18:05:14 + 0200
YYYY-MM-dd'T'HH:MM: ssZZ >> 2012-08-04T18:05:14 + 0200
YYYY-MM-dd'T'HH:MM:ssZZZ >> 2012-08-04T18:05:14 + 0200
YYYY- MM-dd'T'HH:mm:ssZZZZ >> 2012-08-04T18:05:14GMT + 02:00

我該怎麼辦?


[編輯]首先難看溶液:

  1. 刪除最後結腸與正則表達式
  2. 這種格式轉換字符串「YYYY-MM-dd'T'HH:MM:ssZZZ 「

有正則表達式

NSString* dateString = @"2012-08-01T12:43:35+02:00"; 
    NSMutableString* dateWithoutColonString = [dateString mutableCopy]; 

    NSRegularExpression* lastColonRegex = [NSRegularExpression 
              regularExpressionWithPattern:@"([\\+\\-][0-9][0-9]):" 
              options:NSRegularExpressionCaseInsensitive 
              error:nil]; 

    [lastColonRegex replaceMatchesInString:dateWithoutColonString 
           options:NSRegularExpressionCaseInsensitive 
           range:NSMakeRange(0, [dateString length]) 
         withTemplate:@"$1"]; 
+0

如果您發現任何問題的解決方案,請讓我知道 – 2013-10-08 10:41:10

+0

另請參見:[使用NSDateFormatter解析ISO 8601](http://stackoverflow.com/q/10057456) – 2014-09-09 08:48:02

回答

0

Apple對parsing Internet-style dates的討論與您的代碼類似,但有幾處更改。它始終使用en_US_POSIX區域設置,它使用[NSTimeZone timeZoneForSecondsFromGMT:0]而不是本地時區進行分析。試試看看結果是否對你更好。

+0

感謝您的回覆,但如果我'米沒有錯,它不能解決我的問題... – EricD 2012-08-04 17:39:15

+0

它是做什麼的? – 2012-08-04 17:41:07

+0

它無法識別格式並返回nil。 – EricD 2012-08-04 17:46:25

1

使用[formatter setDateFormat:@「yyyy-MM-dd'T'HH:mm:ssZZZZZ」];