我对以下红色下划线的差异感到困惑:
为什么这个NSDate对象在调试窗格中的BST中显示,但在LLDB终端的GMT中被要求“打印”日期“的描述”?
这是使用Xcode 4.6.1
答案 0 :(得分:4)
NSDate
代表一个特定的时刻,不考虑人类称那个时刻。如果您查看NSDate
,您会注意到甚至没有hour
,minute
或second
属性,更不用说{{1}属性。时区是用于解释timeZone
以显示的NSCalendar
的一项功能。 (您可能更熟悉NSDate
;它在内部使用NSDateFormatter
来解释日期。)
在这种情况下,Xcode恰好配置变量面板的日历与LLDB配置调试控制台的日历略有不同。我不得不猜测调试控制台正在调用NSCalendar
,它总是使用UTC,而变量面板正在使用一个尊重当前时区的日期格式化程序。 (你的Mac配置为使用BST,对吗?如果没有,那是一个奇怪的选择...)
答案 1 :(得分:3)
布伦特的答复很好 - 但我想特别提到一个细节。 lldb内置了许多常见类型的格式化程序,包括NSDate
。如果在调试器控制台中执行了p date
,则会获得与“局部”窗口中相同的输出。当您右键单击/控制单击变量并执行“打印说明”时,它等同于在控制台中编写po date
- 正如Brent所说,它调用-description
方法。
这不是控制台vrs。本地窗口差异,或Xcode vrs。 lldb差异。一种访问方法是使用lldb的内置数据格式化程序,一种是调用-description
。