【问题标题】:Printing Date via NSLog with format通过 NSLog 以格式打印日期
【发布时间】:2013-11-10 19:18:46
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以使用 NSDateFormatter 生成您想要的任何格式。关键是,您必须将日期格式化为字符串,而不是简单地在 NSDate 周围挥动格式化程序并期望更改 NSDate。
  • 感谢您的评论。我已经通过 NSDateFormatter 使用 yyyy-MM-dd 格式格式化了我的 NSDate。但是当我 NSLog NSDate 对象时,它仍然给我小时、分钟、秒
  • NSDateFormatter 不会修改现有的NSDate 对象,也不会生成新对象。它只是让您能够从NSDate 生成所需格式的NSString。所以是的,每次你想将它打印到控制台时都必须对其进行格式化,或者如果日期没有改变,则保留NSString

标签: objective-c nsdate nsdateformatter nslog


【解决方案1】:

您可以继承 nsdate 并覆盖 description 方法以返回格式化字符串。或者编写一个类别来做同样的事情,然后在你的日志语句中调用 category 方法。

【讨论】:

  • 是的,如果你想在这方面做任何事情,一个类别将是正确的选择。
  • 值得注意的是,不建议使用类别覆盖方法。见stackoverflow.com/questions/5272451/…
  • 我并不是要暗示:只是添加另一种方法,做他想做的事
【解决方案2】:

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

【讨论】:

  • 我明白了。这就说得通了。所以如果不创建我自己的字符串,真的没有其他方法可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2014-09-29
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多