我正在尝试创建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
答案 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.