iPhone NSDateFormatter时区转换

Joh*_*how 32 iphone nsdateformatter

我正在尝试创建一个格式化程序,将显示的日期格式转换为NSDate对象:

NSString *dateStr = @"2010-06-21T19:00:00-05:00";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSDate *date = [dateFormat dateFromString:dateStr];  
Run Code Online (Sandbox Code Playgroud)

问题是时区-05:00,使用上面的格式无法正确解析.有什么建议?

bry*_*yle 64

要使用冒号处理时区,您只需要使用5'Z'.这是一种非常常见的日期格式,即ISO-8601格式.这仅适用于iOS 6.x +

-(NSDate *) dateFromString:(NSString *)string {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

    return [formatter dateFromString:string];
}
Run Code Online (Sandbox Code Playgroud)

  • 确认这是一个比接受的答案更好的解决方案! (4认同)
  • 适用于iOS6.0 +但不适用于5.0或5.1 (2认同)

chr*_*ssr 31

老实说,在通过格式化程序运行之前,您只需要更改源数据(删除冒号).您的原始日期字符串是非标准的,并且没有任何时区格式字符串可以在其上正常工作.

您可以在unicode.org上看到有效的输入.

ZZZ例如"-0500"

ZZZZ例如"GMT-05:00"

"-05:00"没什么

  • 这不再是最佳解决方案.请参阅下面的答案. (3认同)