我只想澄清一下我是否了解日期和时间。时区工作。
基本上,我有一个日期字符串@“2008-07-06 12:08:49”,我想转换为NSDate。我希望这个日期和时间在当前用户的时区中。无论如何,如果他们是GMT或HST,它仍然是12:08:49。
如果我的日期为unix格式1215382129(UTC)且我的时区设置为伦敦(GMT),则NSLog()的输出日期为:
2008-07-06 12:08:49 +0100
如果我然后将我的时区更改为夏威夷(HST)并输出相同的日期,我会得到:
2008-07-06 12:08:49 -1000
这似乎工作正常,但我的印象是在夏威夷时间,我必须将时间差(-10小时)添加到unix时间戳。这不是必需的吗?
这是否意味着,无论unix时间指向什么日期和时间,它总是指向用户所在时区的相同日期和时间?
希望这是有道理的!
修改
我刚刚意识到(感谢Kevin Conner!)实际上NSDateFormatter正在为该日期字符串创建不同的unix时间戳,具体取决于当前时区!所以我完全错了!! : - )
答案 0 :(得分:5)
免责声明,我主要是一个Java人。但在这方面,Cocoa似乎像Java库一样工作:日期是无区域时间戳。时区属于格式日期以供显示。换句话说,内部格式不考虑时区,它全部是UTC。时区对人类来说相对方便,因此它们处于显示/解析方面。
我注意到NSDateFormatter
上有一个setTimeZone:
method。在执行格式化之前,请尝试在格式化程序上调用它。