我正在尝试创建一个格式化程序,将显示的日期格式转换为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,使用上述格式无法正确解析。有什么建议吗?
答案 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的一些样本写的一个类别