【问题标题】:returns a date an hour in the future返回未来一小时的日期
【发布时间】:2011-02-12 05:30:59
【问题描述】:

我正在使用[NSDate date] 获取当前日期/时间。返回的值是未来的一个小时。我检查了我的手机位置和时间设置,它们是正确的。

我可以使用下面的代码将正确的日期和时间显示为字符串。

[NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle 
                                                       timeStyle:NSDateFormatterShortStyle]

但我需要它以日期对象的形式返回正确的日期/时间,因为我使用它来计算预计到达时间 -

[date dateByAddingTimeInterval:interval]

我意识到我的问题与已经提出的问题相似,但没有一个答案适合我的需要。提前致谢!

init] returning date an hour in the past?

【问题讨论】:

  • 可能是夏令时问题?
  • 尝试重置时区,[NSTimeZone resetSystemTimeZone]。我猜,重置时区可能会更新到当前时间。

标签: iphone nsdate


【解决方案1】:

也许您混淆了时间点(即 NSDate 对象)和您所在位置的时间点(即您的当地时间)。

如果您打印 NSDate(例如调用 [date description]NSLog(@"%@", [NSDate date]);),则打印的日期表示是 UTC 时区 (+0000)(至少它在我的计算机上)。
因此,只要您不住在使用 UTC 的地区,则 [日期描述] 打印的日期;总是“错误的”。但错误仅意味着它的表示与您办公室的时钟的表示不同。日期(如时间点)仍然正确。

当您使用localizedStringFromDate:dateStyle:timeStyle: 时,您将使用当地时区打印日期。

NSDate *date = [NSDate date];
NSLog(@"%@", date);
NSLog(@"%@", [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]);

在我的电脑上,这会导致:

2011-02-12 08:32:10.658 x[75647:207] Date: 2011-02-12 07:32:10 +0000
2011-02-12 08:32:10.661 x[75647:207] Date: Saturday, February 12, 2011 8:32:10 AM Central European Time

打印出来的字符串不同,但是 NSDate 对象还是一样的。这就是为什么在向用户显示日期时必须使用 NSDateFormatters 的原因。因为同一个时间点在世界不同的地方看起来是不同的。


但是只有三个地方的 UTC 格式日期是未来一小时,所以如果你不住在格陵兰、佛得角或亚速尔群岛,我可能完全错了,你的有问题NSDate 对象。


编辑:出于好奇,我再次阅读了有关 [日期描述] 的文档。它说

字符串表示 国际格式的接收器 YYYY-MM-DD HH:MM:SS ±HHMM,其中 ±HHMM 表示时区偏移量 从 GMT 开始的小时和分钟(对于 例如,“2001-03-24 10:45:32 +0600”)。

所以我不知道为什么我的计算机上的日期是以 GMT 时区打印的。它可能位于您计算机上的另一个时区。
但是,这只是表象,日期还是一样的。

【讨论】:

  • 嘿fluchtpunkt,感谢您对我的愚蠢问题的详细回答。一离开办公室,我就意识到内部表示不一定与我的当地时间相同。我还没有实现它,但我应该执行我所有的日期计算,然后使用localizedDateFromString 方法!很抱歉,盯着电脑显示器太久了,我的大脑无法正常工作,哈哈。再次感谢您的帮助!
  • 感谢您的回答,我想知道为什么日期会被偏移
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
相关资源
最近更新 更多