2013-04-16 107 views
2

我有這種格式日期的plist:這些日期的類型是什麼?

Mar 11, 2013 10:16:31 AM 

這在我的控制檯顯示爲

2013-03-11 16:16:31 +0000 

而web服務返回的東西,在控制檯看起來是這樣的:

2013-03-01T18:21:45.231Z 

如何將我的plist日期修復爲與Web服務相同的格式?

+0

第一個(oops,second)格式是你用'%@'格式打印NSDate時得到的。第二個(oops,third)是一個字符串。如果您願意,可以使用NSDateFormatter格式化NSDate以匹配其他樣式。 –

回答

3

關於你提到的三種日期格式:

  1. 首先是剛剛的日期格式,當你在Xcode中,在當前地區的人類可讀的日期(一個的plist看一個NSDate,但如果你看看在文本編輯器中的plist,你會發現它實際上是用@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"格式編寫的)。

  2. 第二是默認從description方法格式化NSDate(例如你NSLog一個NSDate)。

  3. 第三個是RFC 3339/ISO 8601格式(經過幾分之一秒),通常用於Web服務。

請參閱Apple的Technical Q&A QA1480

順便說一句,該技術說明不包括毫秒,所以你可能要使用類似@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'",例如:

NSDate *date = [NSDate date]; 
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.locale = enUSPOSIXLocale; 
formatter.dateFormat = @"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'"; 
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
NSString *dateString = [formatter stringFromDate:date]; 
NSLog(@"%@", dateString); 

,如果你想存儲日期,你可以使用這個在plist中使用RFC 3339/ISO 8601格式的字符串(或者,如果您需要將NSDate轉換爲用於傳輸到Web服務的字符串)。如上所述,默認的plist格式不會保留NSDate對象的小數秒,因此如果這很關鍵,那麼將日期存儲爲上述代碼生成的字符串可能會很有用。

在此日期格式可用於(使用dateFromString)(使用stringFromDate)將日期轉換爲字符串,以及轉換格式正確字符串NSDate對象。

+1

請注意,使用二進制格式('NSPropertyListXMLFormat_v1_0')編寫日期時,日期保留其小數部分。 – Manav