我有以下代码:
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
任何人都能解释一下吗?
答案 0 :(得分:4)
检查此行:
[dateFormater setDateFormat:@"yyyy-MM-DD HH:mm:ss"];
正确的日期格式是@" yyyy-MM-dd HH:mm:ss"用" dd"不是" DD"
我曾经遇到同样的问题......如果日期格式不正确,当您使用dateFormatter时,它会减去或添加一个月的日期。
答案 1 :(得分:3)
您的日期格式字符串"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 reference。 (对于旧版本,请在Apple's documentation中选择正确的链接。)
学术切线:为什么NSDateFormatter
将第二个日期解释为2013年的最后一天(而不是2014年的第一天,如指定的那样)可能是指定一个月和一年中的一天(相互排斥),解析器中的错误(解释一年中的-01
天),或时区或夏令时详细信息(如果规则在当地午夜更改)时区。)