【发布时间】:2011-08-31 23:42:03
【问题描述】:
我试图避免创建 NSDate 对象,因为我的代码需要“当前时间”。我最终打电话给 [[NSDate date] timeIntervalSince1970] 很多。有什么方法可以在不实例化对象的情况下获取时间间隔?
【问题讨论】:
-
你能用 C 的 time() 函数吗?
标签: objective-c cocoa nsdate
我试图避免创建 NSDate 对象,因为我的代码需要“当前时间”。我最终打电话给 [[NSDate date] timeIntervalSince1970] 很多。有什么方法可以在不实例化对象的情况下获取时间间隔?
【问题讨论】:
标签: objective-c cocoa nsdate
CFAbsoluteTimeGetCurrent 为您提供类似的准确度 - 无需对象。
CFAbsoluteTimeGetCurrent 使用不同的基准日期(或参考日期),因此如果您需要使用另一个基准日期(例如相对于 1970 年的某个时间),您必须首先确定偏移量或基准日期。
【讨论】:
NSTimeInterval interval = [NSDate timeIntervalSinceReferenceDate];
【讨论】:
CFAbsoluteTimeGetCurrent() 高效,因为方法调度的开销(诚然非常小)。
您删除了有关比CFAbsoluteTimeGetCurrent 更准确的选项的评论:试试gettimeofday
【讨论】:
CFAbsoluteTimeGetCurrent 的准确度只有 亚秒。例如,当前时间为double 将丢失几位用户精度所需的数字。对于微秒精度,您必须使用gettimeofday(或类似的东西)。但是似乎CFAbsoluteTimeGetCurrent 是合适的。
CFGregorian* apis 应该可以工作(他们使用结构来表示时间)。