2011-08-31 39 views

回答

3

这是一个RFC3339日期格式。

可以使用解析它:

NSDateFormatter* rfc3339DateFormatter = [[NSDateFormatter alloc] init]; 

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

NSDate* date = [rfc3339DateFormatter dateFromString:yourString]; 

[aDateFormatter release]; 

更多信息,请访问该Apple Formatting Dates Documentation ,你也可以找到RFC3339日期格式(关于T和Z)in this section of the RFC3339 standard

+0

之间的分隔符,实际上格式是:@“yyyy-MM-dd'T'HH:mm:ss'Z'” 。感谢您的帮助 –

+0

这是不正确的。你必须不引用'Z'或者你应该指定格式化程序的'timeZone'为GMT/UTC。 – Rob

0

的更多信息解析RFC 3339/ISO 8601日期的方法如下:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ"; 
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

或者,在macOS 10.12和iOS 10中:

NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init]; 

然后:

NSDate* date = [formatter dateFromString:dateString]; 

笔记,所述ZZZZZ告诉格式化器使用存在的串转换字符串NSDate对象时(其中GMT + 0被表示为Z)中的时区。同样,通过设置dateFormattimeZone,此格式化程序还可用于将NSDate对象转换回像2011-08-24T14:06:10Z这样的字符串,进行必要的时区转换。底线,这个格式化程序适用于两个方向。

locale属性的使用也是最佳实践,因为它确保日期将被正确解释,而不管设备的特定日历(即特别是如果它不是公历)。见Technical Q&A 1480