2011-11-18 164 views
17

我已经尝试了其他类似的帖子中的建议没有用。这里的情况是:NSDateFormatter dateFromString给出了错误的日期

我有一个NSString这样的:

Fri November 18, 2011 

,我试图将其转换成一个像这样的日期:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"EE MMMM d, YYYY"]; 
    NSDate *myDate = [df dateFromString: dateString]; 

但由此指明MyDate变量中保存此:

2010-12-31 00:00:00 +0000 

有没有人有任何想法为什么错误的日期是从dateFr中挑选出来的omString?字符串是11月18日,转换日期是12月31日...

谢谢大家!

+1

你应该记录dateString的值,以确保它是你所期望的。也可以尝试使用“EEE”而不是“EE”,“dd”而不是“d”和“yyyy”而不是“YYYY”来排除那里的任何古怪(尽管看起来应该是这样) –

+0

感谢Tim - 'EEE MMMM d,yyyy'作品:-) – sweaves

回答

48

您需要使用yyyy年,而不是YYYY

Apple reference

一个常见的错误是使用YYYY。 yyyy指定日历年,而YYYY指定ISO年份周历中使用的年份(“年份周”)。在大多数情况下,yyyy和yyyy产生相同的数字,但它们可能不同。通常你应该使用日历年。

为了正确您还必须将EE更改为EEE。尽管他们在我的测试中得到了相同的结果。

+1

将YYYY更改为YYYY并将EE更改为EEE - 谢谢! – sweaves

+1

伟大的提示,谢谢! – Chengjiong

+0

这工作!但有一些不寻常的事情..我用这种格式打印2013年的所有日期..只有2013年12月29,30,31被显示为12月29,30,31 2014..weird !!? – iosMentalist

1

我认为你需要“EEE MMMM d,YYYY”,即三重E作为格式字符串。如果这不起作用,我建议使用硬编码的字符串和更简单的日期和格式来解决问题。有关该主题的更多提示,请参阅NSDateFormatter not working

+0

将EE改为EEE是解决问题的第一部分 - 非常感谢! – sweaves