我有一個ASP.NET MVC 3網站,通過JSON與我的iOS應用進行通信。作爲在JSON響應中發送的對象的一部分,我的日期格式爲yyyy-MM-dd HH:mm:ss ZZZ
,它輸出2011-04-05 16:28:22 -07:00
。我如何解析在iOS中?iOS中的日期/時間解析:如何處理(或不處理)時區?
這是我現在用插科打諢代碼:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [dateFormatter dateFromString:@"2011-04-05T16:28:22-0700"];
NSLog(@"%@; %@; %@", dateFormatter, date, [NSTimeZone localTimeZone]);
首先要注意的是,2011-04-05 16:28:22 -07:00
有看起來像2011-04-05T16:28:22-0700
,其中T
替代第一空間(假定表示時間,或者字符串的時間部分從哪裏開始?),第二個空間被刪除,時區中的冒號被刪除。我想我會找到一種方法來格式化.NET發回的字符串,以符合iOS將解析的字符串。
真正的問題是,輸出的日期比我在JSON響應中發送的日期早了7個小時。所以,iOS輸出2011-04-05 16:28:22 -07:00
爲2011-04-05 23:28:22 +0000
,就我的應用而言,這是錯誤的。
我迄今發現的唯一解決方案是將JSON中的日期發送爲2011-04-05 16:28:22 +00:00
,但這又是錯誤的,因爲我正在改變實際日期應該是什麼。
無論如何,我會很感激有人考慮看看,讓我知道我可以解析日期字符串.NET通過格式yyyy-MM-dd HH:mm:ss ZZZ
(我想可以重新寫入yyyy-MM-ddTHH:mm:ssZZZ
)輸出到NSDate
對象我可以在iOS中使用。
當你談論iOS輸出時,你的意思是NSLog?如果是這樣,NSLog總是默認輸出GMT。所以,你的代碼沒有問題。 – 2011-04-05 23:54:11
是的,這就是我所指的。但是如果'NSLog'輸出在格林尼治標準時間什麼說'UILabel'輸出? – Gup3rSuR4c 2011-04-05 23:59:54
NSDate將時間存儲爲GMT。顯示任何日期時,您必須使用[NSDateFormatter](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html)-stringFromDate方法串。 NSDateFormatter也默認爲當前時區。 – 2011-04-06 00:13:23