NSDateFormatter:stringFromDate和dateFromString不可逆?

时间:2013-10-29 16:51:03

标签: ios nsdateformatter

我在使用NSDateFormatter的自定义日期格式化程序将字符串转换为日期时遇到问题。这是一个简短的示例,从今天的日期创建一个字符串,但无法将其转换回NSDate

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"Mdyyyy"];
NSString *example = [dateFormatter stringFromDate:now];    // e.g., 10292013
NSDate *reverse = [dateFormatter dateFromString:example];  // nil?

所以基本上似乎NSDateFormatter正在创建一个日期字符串,它本身不能使用创建字符串的相同格式转回NSDate

使用MMddyyyy作为日期字符串可以正常工作,虽然我无法从documentation(方便地升级到iOS 6.0)看到它为什么重要:

month   M   1..2    09  Month - Use one or two for the numerical month, ....
...
day d   1..2    1   Date - Day of the month

我尝试使用Mdyyyy代替MMddyyyy的原因是因为它更接近NSDateFormatterShortStyle返回的当前NSLocaleM/d/yy )。

也许有人可能会在这里有一些见解,因为我做错了两件事,或者如果我理解这应该如何运作,那我就错了。 (我知道这里有很多关于NSDateFormatter的问题,但我找不到适合我问题的问题。)

1 个答案:

答案 0 :(得分:2)

Mdyyyy是一个模糊的字符串 - >日期映射。无法判断“1112013”​​是1月11日还是11月1日。因此NSDateFormatter不会允许它为字符串 - >日期。