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