ios - iOS 上的 DST 独立时间

标签 ios objective-c time

这是场景:

  1. 我的应用正在运行,它调用一些函数来获取当前时间并将该时间写入持久数据库(即磁盘上)
  2. 我强行终止我的应用并关闭 iPhone
  3. 夏令时来了又去,我飞过了半个地球并越过了国际日期变更线。
  4. 我打开 iPhone 并运行我的应用
  5. 我的应用程序读取数据库中的时间,调用函数来获取当前时间并计算真正耗时(以秒/毫秒/等为单位)。考虑到时区、日期变更线和 DST 变化。

在使用 C/Objective-C 的 iOS 上,我需要调用哪些函数来获取当前时间,以便计算真正耗时?

最佳答案

对于第 1 步,您执行以下操作:

NSDate *currentTime = [NSDate date];

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

NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate];

然后,在第 5 步中,您再次执行完全相同的操作:

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

真正耗时是这样的:

NSTimeInterval elapsedTime = currentTimestamp - timeInTheDatabase.

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

为什么会这样?

它之所以有效,是因为 NSDates始终为 GMT。在通过 NSDateFormatter 进行格式化以供显示之前,不会发生到时区的“转换”。

关于ios - iOS 上的 DST 独立时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345554/

相关文章:

android - 确定 http 请求是来自手机应用还是浏览器

iphone - SIGABRT 错误 - NSUnknownKeyExeption (SetValue :forUndefinedKey;)

objective-c - UITextField 委托(delegate)

sql - 按日期时间分组忽略时间部分

Linux 脚本以秒为单位获取上次修改文件夹的时间

ios - 以 NSException 类型的未捕获异常终止 - 删除 TableView 行

ios - 如何从 Xcode 中删除 "URL Types"?

ios - 单元格变量为零,其中设置了值 collectionview 索引路径

objective-c - UITableView - 直接设置 tableHeaderView 属性与实现 -viewForHeaderInSection 方法

c# - 在 C# 中将时间拆分为两个变量