如何转换该字符串:
2011-08-24T14:06:10Z
使用NSDateFormatter 到NSDate。我不知道要设置哪种格式。这个“T”和“Z”是什么意思?
答案 0 :(得分: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
答案 1 :(得分: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
告诉格式化程序在将字符串转换为Z
个对象时使用字符串中存在的时区(其中GMT + 0表示为NSDate
)。同样,通过同时设置dateFormat
和timeZone
,此格式化程序还可用于将NSDate
个对象转换回2011-08-24T14:06:10Z
之类的字符串,从而进行必要的时区转换。最重要的是,这个格式化器可以同时工作。
使用locale
属性也是最佳做法,因为它确保无论设备的特定日历如何都能正确解释日期(特别是如果它不是格里高利日历)。请参阅Technical Q&A 1480。