NSDate dateFromString 2个月错了吗?

我有以下代码:

NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; [dateFormater setDateFormat:@"yyyy-MM-DD HH:mm:ss"]; [dateFormater setLocale:[NSLocale currentLocale]]; [dateFormater setTimeZone:[NSTimeZone systemTimeZone]]; NSDate *localDate = [dateFormater dateFromString:localUpdate]; NSDate *serverDate = [dateFormater dateFromString:serverUpdate]; 

localUpdate和serverUpdate的输入字符串是:

 2014-01-31 23:42:17 2014-02-01 00:09:37 

将NSString转换为NSDate时,第二个落后2个月?

 2014-01-31 22:42:17 +0000 2013-12-31 23:09:37 +0000 

有谁能解释一下?

xCodelog

检查这一行:

 [dateFormater setDateFormat:@"yyyy-MM-DD HH:mm:ss"]; 

正确的日期格式是@“yyyy-MM-dd HH:mm:ss”,“dd”不是“DD”

我曾经遇到同样的问题……如果日期格式不正确,当你使用dateFormatter时,它会减去或添加一个月的日期。

您的日期格式字符串"yyyy-MM-DD HH:mm:ss"不太正确。

您告诉NSDateFormatter将您的第二个示例中的01解析为一年中的某一天( DD ),而不是您想要的那一天( dd )。

 yyyy-MM-DD HH:mm:ss 2014-02-01 00:09:37 ^^~~~~~~~~~~~ these digits are being parsed as day of year rather than as day of month 

这是一个容易犯的错误,而且你的第一个例子容易混淆,其中一个月的日期和一年中的某一天是相同的。

有关iOS 6及更高版本使用的日期格式,请参阅Unicode参考 。 (对于旧版本,请在Apple的文档中选择正确的链接。)

学术切线:为什么NSDateFormatter将第二个日期解释为2013年的最后一天(而不是2014年的第一天,如指定的那样)可能是指定一个月一年中的一个错误(相互排斥),解析器中的错误(解释一年中的第01天),或时区或夏令时详细信息(如果规则在当地时区的午夜更改。)