DST在iOS上的独立时间

时间:2014-01-25 01:50:20

标签: ios objective-c time

以下是该方案:

  1. 我的应用正在运行,它调用一些函数来获取当前时间并将此时间写入持久数据库(即磁盘上)
  2. 我强行杀了我的应用程序并关闭了我的iPhone
  3. 夏令时已经过去了,我已经绕着路走了一半,越过了国际日期线。
  4. 我打开iPhone并运行我的应用
  5. 我的应用程序读取数据库中的时间,调用函数获取当前时间并计算实际经过的时间(以秒/毫秒为单位)等。计算时区,日期线和DST变化。
  6. 在使用C / Objective-C的iOS上,我需要调用哪些函数来获取当前时间才能计算出真正经过的时间?

2 个答案:

答案 0 :(得分:3)

对于第1步,执行此操作:

NSDate *currentTime = [NSDate date];

或者,如果您不想要一个对象并想要一个double值,您可以这样做:

NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate];

然后,在步骤5中,您再次执行完全相同的事情

NSTimeInterval timeInTheDatabase = ...
NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate];

真正经过的时间是:

NSTimeInterval elapsedTime = currentTimestamp - timeInTheDatabase.

这将为您提供第一次和第二次之间的秒数。

为什么这样做?

它有效,因为NSDates 总是在GMT中。在通过NSDateFormatter

进行格式化显示之前,不会发生到您的时区的“转换”

答案 1 :(得分:1)

最好直接使用timeIntervalSinceDate:

对于第1步,您将获得当前日期并存储它:

NSDate *storedDate = [NSDate date];

当你想要花费经过的时间时,你可以使用它:

float elapsedTime = [NSDate timeIntervalSinceDate:storedDate];

我认为这比获得自2001年1月1日第一个瞬间,GMT(timeIntervalSinceReferenceDate)以来的经过时间以及进行计算更好......