2011-04-29 67 views
2

正常工作,我有以下日期:2011-04-29T14:54:00-04:00NSDateFormatter不与UTC

当它运行时通过下面的代码将其转换为一个日期,日期为null出于某种原因:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSDate *date = [dateFormatter dateFromString:localDate]; 
[dateFormatter release]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-mm-dd"]; 
NSLog(@"%@", [formatter stringFromDate:date]); 

任何帮助,将不胜感激

解决:

好吧,我想通了。出于某种原因,此方法不起作用。

NSDate *date = [dateFormatter dateFromString:localDate]; 

这反而有效。希望它能帮助别人!

NSError *error = nil; 
NSDate *date = nil; 
[dateFormatter getObjectValue:&date forString:localDate range:nil error:&error]; 
+0

哪一个是空的?您尝试在最后登录的字符串或从第一个日期格式化程序获取的日期?另外,你的第二种格式看起来很奇怪:你真的想要“四位数分钟 - 一天”吗? – 2011-04-30 00:13:26

+0

当我停在NSLog行的断点处时,date变量为nil。我只是把这个四位数的年 - 分 - 日作为一个测试,把它写回字符串。 – 2011-04-30 01:22:56

回答

3

好的,我想通了。出于某种原因,此方法不起作用。

NSDate *date = [dateFormatter dateFromString:localDate]; 

这反而有效。希望它能帮助别人!

NSError *error = nil; 
NSDate *date = nil; 
[dateFormatter getObjectValue:&date forString:localDate range:nil error:&error]; 
+0

你知道如何添加timeoffset“2012-10-15T09:46:16 + 02:00”以便得到“2012-10-15 11:46:16”吗?提前致谢 – 2012-10-16 19:04:58

2

尝试设置时区:

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

,你可能需要引用-'s,:'s,在您的格式字符串中的Z(也许不是-'s和:的,但我认为至少Z):

[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; 

除了那些,这就是我的日期格式化程序配置,它工作正常。

+0

这对我也不适用。我会继续努力...... – 2011-04-30 01:35:04

0

NSDateFormatter似乎只使用UTS #35中描述的'Z'来实现时区的规范格式。用no leniency in parsing

  1. TimeZoneID +/-偏移量,小时和分钟用冒号分隔,例如。 2011-04-29T14:54:00GMT-04:00
  2. +/-偏移量,小时和分钟之间不分隔,例如。 2011-04-29T14:54:00-0400

尝试更改localDate字符串中时区的格式。