0

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

无论如何,这肯定不是一月 - 为什么这如此不正确?

谢谢!R

4

1 回答 1

2

日期格式指南文档

[本示例] 使用 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

有趣的事实!

这就是 Apple 在 2013 年初出现的“请勿打扰”漏洞的原因,他们使用 YYYY 而不是 yyyy。更多信息在这里。

于 2013-04-29T20:41:48.203 回答