转换前。 2010-09-11T00:00:00 + 01:00格式的NSDate

问题描述:

我有什么我以为会是两分钟的任务,花费了太多的时间(超过一个小时)。 在iPhone:转换前。 2010-09-11T00:00:00 + 01:00格式的NSDate

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]; 

结果:日期==零

我在想什么! (除了我的最后期限)

问候,

+0

哈哈,我已经发布了完全相同的问题,10分钟前:http://stackoverflow.com/questions/4179993 – samvermette 2010-11-14 22:26:42

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。

+0

谢谢你。正如我得到的时间码两种格式... + 01:00 ... Z即2010-09-11T00:00:00Z,只是要添加从+00删除冒号:00时间码和检查Z,如果不存在,则在这种情况下将代码更改为YYYY-MM-dd'T'HH:mm:ssZ。 - 令人困惑的句子,但它迟了,我累了......谢谢! – gnasher 2010-11-15 02:53:51

提示:尝试使用您的格式化程序一个NSDate对象转换为一个字符串,然后看看会发生什么。在这方面调试通常比其他方式更容易。

你读过吗?

http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

这TZD在您的格式字符串的结尾看起来有点狡猾。

+0

TZD是时区指示符。请参阅:http://www.w3.org/TR/NOTE-datetime – gnasher 2010-11-14 22:46:37

+0

这是与NSDateFormatter使用的标准不同的标准。看看unicode.org链接。 – 2010-11-14 23:48:51

我解决了使用this代码这个问题。

+1

什么代码? 链接中断。 – Brett 2016-10-27 04:39:32