1

我有一个日期:

2012-10-11T23:14:00-04:00

我正在使用这种格式来解析 NSDateFormatter:

yyyy-MM-dd'T'HH:mm:ss-ZZ

但它返回 nil

4

1 回答 1

1

您的日期格式错误。如果要转换的字符串中有冒号,则必须在格式字符串中放入 5 个 Z字符,这是正确的用法。此外,您永远不会将 +/- 作为格式的一部分,因为不能保证只有日期 + 或 - GMT(至少在您谈论 /format/ 时不会)。

因此,正确的格式字符串将是yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZZZ

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZZZ"];
NSDate* date = [formatter dateFromString:@"2012-10-11T23:14:00-04:00"];
NSLog(@"Date: %@", date); // This correctly logs Date: 2012-10-12 03:14:00 +0000

仅使用两个Z字符将是 RFC 822 格式,并且您的日期字符串必须看起来像:(2012-10-11T23:14:00-0400即,时区偏移量上没有小时/分钟分隔符)。示例字符串中的时区是 ISO-8601。有关详细信息,请参阅:http ://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

于 2012-10-13T07:13:57.303 回答