为什么我的NSDateFormatter创建错误的日期?

时间:2013-04-29 20:29:04

标签: ios nsstring nsdateformatter

我正在尝试创建datefromstring。但是,创建日期是错误的。任何人都可以看到我的代码有什么问题吗?

这是代码:

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MM/dd/YYYY hh:mm"];
[format setTimeZone:[NSTimeZone localTimeZone]];
NSString *datePart = [txtView.text substringToIndex:16];
NSLog(@"datepart: '%@'", datePart);
NSDate *midDate = [format dateFromString:datePart];
NSLog(@"format middate: %@", [format stringFromDate:midDate]);

这是输出:

datepart: '04/29/2013 04:23'
format middate: 01/05/2013 04:23

肯定不是1月份 - 为什么这么不正确?

谢谢! [R

1 个答案:

答案 0 :(得分:2)

来自Date Formatting Guide documentation

  

[本示例]使用yyyy指定年份组件。一个常见的错误是使用YYYY。 yyyy指定日历年,而YYYY指定ISO年度日历中使用的年份(“年度周”)。在大多数情况下,yyyy和YYYY会产生相同的数字,但它们可能会有所不同。通常,您应该使用日历年。

我使用YYYY和yyyy给代码示例运行,yyyy产生正确的结果。

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MM/dd/yyyy hh:mm"];
[format setTimeZone:[NSTimeZone localTimeZone]];
NSString *datePart = @"04/29/2013 04:23";
NSLog(@"datepart: '%@'", datePart);
NSDate *midDate = [format dateFromString:datePart];
NSLog(@"format middate: %@", [format stringFromDate:midDate]);

打印

2013-04-29 21:40:42.450 Untitled[95290:707] datepart: '04/29/2013 04:23'
2013-04-29 21:40:42.453 Untitled[95290:707] format middate: 04/29/2013 04:23

有趣的事实!

这是苹果在2013年初遇到的“请勿打扰”的原因,他们使用的是YYYY而不是yyyy。 Some more info here.