2013-10-30 60 views
0

是否可以通过NSLog打印NSDate对象而不打印小时,分钟,秒?我想要它记录的是这种格式yyyy-MM-dd,没有小时,分钟,秒。通过NSLog格式打印日期

我已经有了yyyy-MM-dd的NSDateFormatter,但是当我通过NSLog打印NSDate对象时,它仍然给我小时,分钟,秒钟。

有没有办法做到这一点,而不从日期对象创建另一个字符串,然后记录该字符串?

+1

您可以使用NSDateFormatter生成您想要的任何格式。重点是,您必须将日期格式化为字符串,而不是简单地将格式化程序围绕NSDate进行波动,并期望更改NSDate。 –

+0

感谢您的评论。我已经使用yyyy-MM-dd格式通过NSDateFormatter格式化了我的NSDate。但是,当我NSLog的NSDate对象,它仍然给我的小时,分​​钟,秒 – aresz

+2

'NSDateFormatter'不会修改现有的NSDate'对象,也不会产生一个新的。它只是为您提供从'NSDate'生成所需格式的'NSString'的能力。所以是的,每当你想把它打印到控制台时,你都必须格式化它,或者如果日期没有改变,就保留'NSString'。 –

回答

1

您可以继承nsdate并覆盖description方法以返回格式化的字符串。或者写一个类别来执行相同的操作,只需在日志语句中调用类别方法即可。

+1

是的,如果有人想在这方面做任何事情,那么类别就是要走的路。 –

+0

值得注意的是,不推荐使用类别覆盖方法。看到http://stackoverflow.com/questions/5272451/overriding-methods-using-categories-in-objective-c – ianyh

+0

我并不是想暗示:只是添加另一种方法,做他想做的事情 – pickwick

1

NSLog遇到目标c对象(通过%@标记)时,它调用方法-[NSObject description]并在其位置输出结果字符串。 NSDate该方法的执行打印小时,分钟和秒。让它以不同方式打印的唯一方法是使用NSDateFormatter自己生成一个字符串。

+0

我明白了。这就说得通了。所以没有其他方法可以做到这一点,而无需创建我自己的字符串。 – aresz