【问题标题】:Handling time zones in Cocoa在 Cocoa 中处理时区
【发布时间】:2009-12-30 15:59:38
【问题描述】:

我只是想澄清一下我是否了解日期和时区的工作原理。

基本上,我有一个日期字符串 @"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 时间戳!所以我完全错了!! :-)

【问题讨论】:

    标签: iphone cocoa datetime timezone unix-timestamp


    【解决方案1】:

    免责声明,我主要是 Java 人。但 Cocoa 在这方面似乎与 Java 库一样工作:日期是无区域时间戳。时区在格式化显示日期的域中。换句话说,内部格式不考虑时区,都是UTC。时区对人类来说相对方便,所以它们在显示/解析方面。

    我注意到NSDateFormatter 上有一个setTimeZone: method。在执行格式化之前尝试在格式化程序上调用它。

    【讨论】:

    • 啊,有趣!我没有意识到NSDateFormatter 使用了时区。它似乎是从系统默认值自动设置它。它会根据区域创建不同的 unix 时间戳!谢谢!
    • 我还没有证实这一点,但我想你会发现日期解析也是如此:当你解析一个日期字符串时,它会假设该字符串在你的系统时区,除非您以不同方式配置解析器。干杯:)
    猜你喜欢
    • 1970-01-01
    • 2019-05-05
    • 2023-03-15
    • 2010-09-25
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多