2013-04-16 75 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