我在使用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
返回的当前NSLocale
(M/d/yy
)。
也许有人可能会在这里有一些见解,因为我做错了两件事,或者如果我理解这应该如何运作,那我就错了。 (我知道这里有很多关于NSDateFormatter
的问题,但我找不到适合我问题的问题。)
答案 0 :(得分:2)
Mdyyyy是一个模糊的字符串 - >日期映射。无法判断“1112013”是1月11日还是11月1日。因此NSDateFormatter不会允许它为字符串 - >日期。