我花了太多时间(超过一个小时)来完成我将要做的两分钟任务。 在iPhone上:
NSString * dateString = @"2010-09-11T00:00:00+01:00";
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssTZD"];
NSDate *date = [formatter dateFromString:dateString];
结果:日期== nil
我错过了什么! (除了我的截止日期)
此致
肯
答案 0 :(得分:12)
TZD不是每个the unicode spec定义的格式化程序。您链接到其他地方的文档是某人向W3C提出的建议,仅供讨论。 Apple推出的unicode标准是一个完整的标准,来自不同的机构。
最接近你想要的是ZZZ(即@“YYYY-MM-dd'T'HH:mm:ssZZZ”),但中间没有冒号。所以你需要使用字符串:
2010-09-11T00:00:00+0100
而不是你现在拥有的那个以+01:00结束。
E.g。以下内容:
NSString * dateString = @"2010-09-11T00:00:00+0100";
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"%@", date);
记录2010-09-10 23:00:00 GMT的有效日期对象。
答案 1 :(得分:2)
提示:尝试使用格式化程序将从 NSDate对象转换为字符串,然后查看您获得的内容。在这方面调试通常比另一方更容易。
你读过这个吗?
http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
格式字符串末尾的TZD看起来有些狡猾。
答案 2 :(得分:-1)
我使用this代码解决了这个问题。