iPhone NSDateFormatter时区转换

时间:2010-06-22 15:42:48

标签: 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];  

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

6 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:30)

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

您可以看到有效输入on unicode.org

ZZZ,例如“-0500”

ZZZZ,例如“GMT-05:00”

“-05:00”没有任何内容

答案 2 :(得分:2)

可能是我错过了一些东西,但ZZ为我工作。 我用过:

@"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"

2014-02-27T08:00:00.000+04:00

答案 3 :(得分:1)

这是我从Sinatra ActiveRecord后端获得的默认时间格式。这是我的解决方案。

-(NSDate *) dateFromString:(NSString *)string{
    NSMutableString * correctedDateString = [[NSMutableString alloc] initWithString:string];
    [correctedDateString deleteCharactersInRange: NSMakeRange(22, 1)];

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

    return [formatter dateFromString:correctedDateString];
}

答案 4 :(得分:1)

这是唯一对我有用的解决方案:

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

答案 5 :(得分:0)

5 ZZZZZ - 这是我用GMT到BST的一些样本写的一个类别

https://github.com/clearbrian/NSDateFormatter_ISO_8601