2

我使用相同的、未经修改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 并使用相同的日期格式化程序对生成的日期进行编码,以避免在格式化日期时出现任何人为错误。有没有可靠的方法从人类可读的日期字符串中获取日期对象?

4

1 回答 1

19

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

于 2013-02-12T17:58:13.080 回答