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

Sal*_*uts 2 nsdate nsdateformatter ios

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

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

输出:

Monday Aug 12, 2013
2012-12-31 05:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

与其他日期再试几次:

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
Run Code Online (Sandbox Code Playgroud)

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

eld*_*his 19

我认为问题在于你使用的是YYYY代替yyyy.大写变体是基于"一年中的一周"的日历(更多参见UTS规范),这实际上与在许多(大多数?)情况下获取文字日历年度不同.使用@"EEEE MMM d, yyyy"日期格式化程序可能会为您解决此问题.