【问题标题】:NSDate date returns 2h less than it shouldNSDate 日期返回的时间比应有的少 2 小时
【发布时间】:2011-08-03 16:12:30
【问题描述】:

当我调用 [NSDate date] 时,它返回的时间比它应该返回的时间少 2 小时。我检查了我的电脑时钟设置,它们都正常。我检查了 iPhone 中的设置,时区和时钟都正常。甚至模拟器在顶部工具栏上显示正确的时间。但是,当我尝试记录当前日期时,它显示的时间比应有的时间少 2 小时。我想不出去哪里看。

【问题讨论】:

  • 日志输出报告什么时区?你在哪个时区?大概就是这样:格林威治标准时间的 10:00 并不比 +02:00 的 12:00 早 2 小时,它是同一时间,只是格式不同。
  • 查看日历?是公历吗?尝试使用 NSLog(@"%@", [[NSTimeZone systemTimeZone] description]) 检查您的时区
  • 它是公历。当我记录 systemTimeZone 时,我得到了 7200 的偏移量,这正是我丢失的 2 小时。但我仍然无法弄清楚使用当地时间的最佳做法是什么。我猜这是格式化程序的问题,但我还是没得到什么?

标签: iphone objective-c xcode ios nsdate


【解决方案1】:

[NSDate date] 返回的所有日期均采用 GMT 时区。

当您使用任何 NSDateFormatter 时,只需设置时区,它就会打印出正确的时间。

【讨论】:

  • :D 这就是我一直喜欢的东西。当一切都失败时,RTFM!
  • 实际上,该对象应该只包含时间,这与位置无关,其余的取决于您如何提取和显示它,这就是格林威治标准时间似乎在起作用的地方 ;-)
【解决方案2】:

仔细查看 NSLog() 语句的输出。您将看到输出始终包含使用标准 UTC 的时区。因此,考虑到时区,日期实际上是正确的。

【讨论】:

  • Tnx,但在这种情况下我仍然没有得到最佳实践。我怎样才能得到当前的当地时间?通过格式化程序?
【解决方案3】:

我在这里找到了我的解决方案:How to convert time to the time zone of the iPhone device?

因此,如果您想将 [NSDate 日期] 更改为指向本地时间,只需使用上面链接中提供的代码即可。并且不要忘记将 sourceTimeZone 上的 timeZoneWithAbbreviation 从 EST 更改为 GMT(因为 NSDate 始终在 GMT)

再次感谢大家的帮助..

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2023-03-19
    • 2013-04-09
    • 2013-07-25
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多