iOS NSDateFormatter从字符串返回错误的日期

时间:2013-02-12 17:48:39

标签: ios nsdate nsdateformatter

我使用相同的,未经修改的NSDateFormatter来编码和解码字符串中的日期。将日期编码到字符串工作正常,但将其取回奇怪地不能正常工作。它甚至不是时区问题,因为大多数日期几个月关闭。我有:

NSDateFormatter *_calibrationDateFormat = [[NSDateFormatter alloc] init];
[_calibrationDateFormat setDateFormat:@"EEEE MMM d, YYYY"];
NSString *text = @"Thursday Dec 6, 2018";
NSLog(@"%@\n%@", text, [_calibrationDateFormat dateFromString:text]);

输出:

Monday Aug 12, 2013
2012-12-31 05:00:00 +0000

与其他日期再试几次:

Friday Apr 12, 2013
2013-01-04 05:00:00 +0000

Saturday Oct 26, 2013
2013-01-05 05:00:00 +0000

Thursday Sep 10, 2015
2015-01-01 05:00:00 +0000

Thursday Jan 5, 2017
2017-01-05 05:00:00 +0000

我真的不知道它解码这些日期的逻辑。我也尝试了不同的格式,例如删除星期几,或使用完整的月份名称而不是3个字母的缩写,但结果同样令人困惑。请注意,对于我的测试,我使用的是UIDatePicker,并使用相同的日期格式化程序对结果日期进行编码,以避免在格式化日期时出现任何人为错误。有没有可靠的方法从类似的人类可读日期字符串中获取日期对象?

1 个答案:

答案 0 :(得分:19)

我认为问题在于您使用的是YYYY而不是yyyy。大写变体是基于“一年中的一周”的日历(有关更多信息,请参阅the UTS spec),这与在许多(大多数?)情况下获取文字日历年度实际上并不相同。使用@"EEEE MMM d, yyyy"作为日期格式化程序可能会为您解决此问题。