这是场景:
- 我的应用正在运行,它调用一些函数来获取当前时间并将该时间写入持久性数据库(即磁盘上)
- 我强行终止我的应用并关闭我的 iPhone
- 夏令时来了又去,我已经飞过半个地球,越过了国际日期变更线。
- 我打开我的 iPhone 并运行我的应用程序
- 我的应用读取数据库中的时间,调用一个函数来获取当前时间,并以秒/毫秒/等为单位计算真正耗时。考虑时区、日期线和 DST 变化。
在使用 C/Objective-C 的 iOS 上,我需要调用哪些函数来获取允许我计算真正耗时的当前时间?
Best Answer-推荐答案 strong>
对于第 1 步,您可以这样做:
NSDate *currentTime = [NSDate date];
或者,如果您不想要一个对象并且想要一个 double 值,您可以这样做:
NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate];
然后,在第 5 步中,您再次执行完全相同的操作:
NSTimeInterval timeInTheDatabase = ...
NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate];
那么真正耗时是这样的:
NSTimeInterval elapsedTime = currentTimestamp - timeInTheDatabase.
这将为您提供第一次和第二次之间的秒数。
为什么会这样?
之所以有效,是因为 NSDates 是 always 在 GMT 中。在通过 NSDateFormatter 格式化显示之前,不会发生到您的时区的“转换”。
关于ios - iOS 上的 DST 独立时间,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/21345554/
|