在我的 iOS 应用程序上重复运行的代码中,我有:
// int timeStampMilliseconds = (ceil([[NSDate date] timeIntervalSince1970] * 1000.0));
// double timeStampMilliseconds = [[NSDate date] timeIntervalSince1970] * 1000.0;
// double timeStampMilliseconds = CACurrentMediaTime() * 1000;
double timeStampMilliseconds = CFAbsoluteTimeGetCurrent() * 1000.0;
double hours = fmodf(timeStampMilliseconds, 86400000) / 3600000.0;
double minutes = fmodf(timeStampMilliseconds, 3600000) / 60000.0;
double seconds = fmodf(timeStampMilliseconds, 60000) / 1000.0;
NSLog(@"Milliseconds: %lf, Hours: %lf, minutes: %lf, seconds: %lf", timeStampMilliseconds, hours, minutes, seconds);
我知道的三种获得时间的方法是[NSDate date] timeIntervalSince1970
,CACurrentMediaTime()
和CFAbsoluteTimeGetCurrent()
当我运行它们时, timeIntervalSince1970 和 CFAbsoluteTimeGetCurrent 将 UTC 时间缩短到几秒钟内......但奇怪的是,当到达日志语句时,毫秒以适当的速度上升,但小时、分钟和秒当时被冻结他们开始了。时钟指针不动。
CACurrentMediaTime 显示了更多人们期望的内容;它准确地显示了自某个时间标记以来已经过去了多少时间,这意味着秒、分钟和小时都在增加。
我想我可以做一个变通行为,让初始化程序将一个常量初始化为 TimeIntervalSince1970 减去 CACurrentMediaTime,然后在引用的代码中添加保存的常量和 CACurrentMediaTime。但是我想知道发生了什么以及为什么,对于三种计时方法中的两种,原始的毫秒数会更新为小时、分钟和秒,但小时、分钟和秒会被冻结。
谢谢,