转换ex。 2010-09-11T00:00:00 + 01:00格式为NSDate

时间:2010-11-14 22:23:40

标签: iphone objective-c nsdate

我花了太多时间(超过一个小时)来完成我将要做的两分钟任务。 在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

我错过了什么! (除了我的截止日期)

此致

3 个答案:

答案 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代码解决了这个问题。