stringFromDate和dateFromString有时会返回null

时间:2014-02-17 19:45:50

标签: ios objective-c nsdateformatter

我只需将格式为“2013:07:24 11:05:04”的日期格式化为此格式“24-lug-2013”​​,这是我用来执行此操作的代码:< / p>

NSDateFormatter *dtF = [[NSDateFormatter alloc] init];
[dtF setDateFormat:@"yyyy:MM:dd hh:mm:ss"];
NSDate *d = [dtF dateFromString:self.creationDate];
NSDateFormatter *dateFormatStr = [[NSDateFormatter alloc] init];
[dateFormatStr setDateFormat:@"d-MMM-yyyy"];
NSString *strDate = [dateFormatStr stringFromDate:d];

NSLog(@"%@",strDate);

这段代码工作正常,问题是经过几次调用此方法后,有时我得到一个空字符串,但输入的格式仍然相同。

例如,使用此字符串作为输入“2013:07:24 11:05:04”我得到这个:24-lug-2013,这正是我想要的,但是在这种情况下7次调用之后,这个输入“2013:07:24 13:47:31”我得到一个空的NSDate,结果是null的结果字符串。

问题在哪里? 感谢

2 个答案:

答案 0 :(得分:2)

当传递给它们的日期字符串与格式不匹配时,日期格式化程序返回nil。您发布的代码在输入字符串上使用dateFromString。如果失败,则NSDate“d”将为nil,因此对stringFromDate的调用也可能返回nil。 (尽管如果传入NSDate为nil,stringFromDate也可能会崩溃)

答案 1 :(得分:1)

我通过改变这一行解决了:

[dtF setDateFormat:@"yyyy:MM:dd hh:mm:ss"];

用这个:

[dtF setDateFormat:@"yyyy:MM:dd HH:mm:ss"];

这是因为“hh”表示小时,意味着1到12到14:00之间的值,例如,会失败。所以如果你想要24小时格式使用“HH”