NSString转换为NSDate。问题" 2011-08-24T14:06:10Z"

时间:2011-08-31 07:29:55

标签: iphone ios ipad nsstring nsdate

如何转换该字符串:

2011-08-24T14:06:10Z
使用NSDateFormatter

到NSDate。我不知道要设置哪种格式。这个“T”和“Z”是什么意思?

2 个答案:

答案 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)。同样,通过同时设置dateFormattimeZone,此格式化程序还可用于将NSDate个对象转换回2011-08-24T14:06:10Z之类的字符串,从而进行必要的时区转换。最重要的是,这个格式化器可以同时工作。

使用locale属性也是最佳做法,因为它确保无论设备的特定日历如何都能正确解释日期(特别是如果它不是格里高利日历)。请参阅Technical Q&A 1480