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
有谁能解释一下?
检查这一行:
[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天),或时区或夏令时详细信息(如果规则在当地时区的午夜更改。)