NSDateFormatter与UTC无法正常工作

时间:2011-04-29 23:58:56

标签: iphone objective-c ios4

我的日期如下:2011-04-29T14:54:00-04:00

当它运行以下代码将其转换为日期时,由于某种原因,日期为空:

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

3 个答案:

答案 0 :(得分:3)

好的,我明白了。出于某种原因,这种方法不起作用。

NSDate *date = [dateFormatter dateFromString:localDate];

这相反。希望它可以帮助别人!

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

答案 1 :(得分:2)

尝试设置时区:

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

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

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

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

答案 2 :(得分: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
  3. 尝试更改localDate字符串中时区的格式。