2013-12-10 14 views
1

您好我需要這個字符串如何從日期JSON轉換成NSDate的

轉換 「2013-12-05T08:58:55.9345456 + 02:00」

到NSDate的 我試圖接下來的格式,但沒有運氣

「YYYY-MM-dd'T'HH:MM:SSSSSSSZZZZZ」

以下代碼。

你能幫我做正確的格式

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
//       "2013-12-05T08:58:55.9345456+02:00" 
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:SSSSSSSZZZZZ"]; 

NSDate *date = [dateFormat dateFromString:jsonDateString]; 
+0

試試這個https://gist.github.com/exalted/726910 – Sport

+1

'[dateFormat setDateFormat:@「yyyy-MM-dd'T'HH:mm:ss'。''''02:00'' ];' –

+0

@AnoopVaidya這不是字符串的正確格式。 – rmaddy

回答

4

您的格式接近。您需要:

yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZZ 

而且一定要格式化的語言環境設置爲en_US_POSIX。解析固定格式的非本地化字符串時,應始終執行此操作。

+0

不好意思說,但是當我嘗試這個時,我得到(null)。我正在使用OSX。 –

+0

@AnoopVaidya務必將格式化程序的區域設置設置爲'en_US_POSIX'。 – rmaddy

+0

離開它,它不適用於OSX proj。這可能適用於iOS項目。 :( –

1
NSString * dateStr = @"2013-12-05T08:58:55.9345456+02:00"; 
NSArray *dateStrParts = [dateStr componentsSeparatedByString:@"T"]; 
NSString *datePart = [dateStrParts objectAtIndex:0]; 
NSString *timePart = [dateStrParts objectAtIndex:1]; 

NSString *t = [[timePart componentsSeparatedByString:@"."] objectAtIndex:0]; 
NSString *newDateStr = [NSString stringWithFormat:@"%@ %@",datePart,t]; 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // Change here for your formated output 
NSDate *date = [df dateFromString:newDateStr]; 
NSLog(@"%@",date); 

輸出

2013年12月5日8點58分55秒+0000

+0

而不是所有的字符串處理,只需使用適當的日期格式。 – rmaddy

1

問題出在你所在的時區+02:00

ZZZZ只解析爲+0000,因此您得到nil

你可以這樣做:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
NSString *jsonDateString = @"2013-12-05T08:58:55.9345456+02:00";//@"2013-12-05T08:58:55.9345456+02:00" 

NSRange lastColon = [jsonDateString rangeOfString:@":" options:NSBackwardsSearch]; 
if(lastColon.location != NSNotFound) { 
     jsonDateString = [jsonDateString stringByReplacingCharactersInRange:lastColon withString: @""]; 
} 

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SZ"]; 
NSDate *date = [dateFormat dateFromString:jsonDateString]; 

NSLog(@"%@",date) 

編輯:

按rmaddy的評論,你應該使用SSSSS,而不是單一的S

+0

'+02:00'格式的時區可以使用'ZZZZZ'日期格式進行分析。你爲什麼扔掉小數秒? – rmaddy

+0

@rmaddy:那裏是'S'在那裏...而我嘗試了'ZZZZZ',但沒有得到解析:( –

+0

單個'S'處理多個小數位?爲什麼從時區剝離冒號?可以用適當的格式進行處理。 – rmaddy