2013-01-09 56 views
2

我想解析一個RSS源,但日期很難解析。日期字符串是:publishedDate = "2013-01-08T20:09:02.000Z"NSDateFormatter麻煩?

這裏是我的代碼:

NSDateFormatter *utc = [[NSDateFormatter alloc] init]; 
[utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[utc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
NSDate *dtUTC = [utc dateFromString: publishedDate]; 

NSDateFormatter *dfLocal = [[NSDateFormatter alloc] init]; 
[dfLocal setDateFormat:@"yyyy-MM-dd"]; 
[dfLocal setTimeZone:[NSTimeZone localTimeZone]]; 

NSString *time =[dfLocal stringFromDate:dtUTC]; 
NSLog(@"original UTC %@ now local: %@", dtUTC, time); 

爲什麼date返回nil?此外,我試圖將UTC時間轉換爲CST時間。

+0

什麼是'publishedDate'? – wigging

+0

串... 2013-01-08T20:09:02.000Z –

回答

2

使用

[utc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.'000Z'"]; 
+0

它的工作原理,但我的日期都具有相同的月份?這是01 –

+0

米需要在大寫。 – msk

+0

它仍然給我相同的01 –

1

對於STIME包括毫秒使用 「S」。

[utc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'"]; 

NSString *publishedDate = @"2013-01-08T20:09:02.000Z"; 
NSDateFormatter *utc = [[NSDateFormatter alloc] init]; 
[utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[utc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'"]; 
NSDate *dtUTC = [utc dateFromString: publishedDate]; 
NSLog(@"dtUTC: %@", dtUTC); 

的NSLog輸出:
dtUTC:2013年1月8日20時09分02秒0000

SDateFormatter *dfLocal = [[NSDateFormatter alloc] init]; 
[dfLocal setDateFormat:@"yyyy-MM-dd"]; 
[dfLocal setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 

NSString *time =[dfLocal stringFromDate:dtUTC]; 
NSLog(@"original UTC %@ now local: %@", dtUTC, time); 

的NSLog輸出:
原始UTC 2013年2月8日20時09分02秒現在+0000地方:2013年2月8日

1

只需更改時區名稱,CST和更改setDateFormat如下:

NSDateFormatter *cst = [[NSDateFormatter alloc] init]; 
    [cst setTimeZone:[NSTimeZone timeZoneWithName:@"CST"]]; 
    [cst setDateFormat:@"yyyy-mm-dd'T'HH:mm:ss.'000Z'"]; 
    NSDate *theCST = [cst dateFromString:publishedDate]; 
    NSLog(@"theCST is %@", theCST);