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

iOS NSDateFormatter从字符串返回错误的日期,ios,nsdate,nsdateformatter,Ios,Nsdate,Nsdateformatter,我使用相同的未修改的NSDateFormatter对字符串中的日期进行编码和解码。将日期编码为字符串可以很好地工作,但奇怪的是,将其取回并不能很好地工作。这甚至不是时区的问题,因为大多数日期都有几个月的时间。我有: NSDateFormatter *_calibrationDateFormat = [[NSDateFormatter alloc] init]; [_calibrationDateFormat setDateFormat:@"EEEE MMM d, YYYY"]; NSString

我使用相同的未修改的
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

我真的不知道它解码这些日期的逻辑。我也尝试了不同的格式,比如删除一周中的某一天,或者用全名代替三个字母的缩写,但结果同样令人困惑。请注意,对于我的测试,我使用了UIDatePicker,并使用相同的日期格式化程序对结果日期进行编码,以避免在格式化日期时出现任何人为错误。有没有可靠的方法可以从这样的人类可读的日期字符串中获取日期对象?

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

我不太喜欢时区,大多数日期都不太合适。它似乎与选择1月份的日期有关,而不是我实际选择的日期。1月5日仍然是1月5日,但9月、10月等-成为1月的其他日期。真的很奇怪。很好,原来我在整个项目中都无意中使用了这个。