首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么时间冻结在这里?我能从1970年开始每一次都打几秒钟吗?

为什么时间冻结在这里?我能从1970年开始每一次都打几秒钟吗?
EN

Stack Overflow用户
提问于 2013-10-13 00:17:20
回答 1查看 372关注 0票数 1

在我的iOS应用程序上反复运行的代码中,我有:

代码语言:javascript
复制
// 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] timeIntervalSince1970CACurrentMediaTime()CFAbsoluteTimeGetCurrent()

当我运行它们时,timeIntervalSince1970和CFAbsoluteTimeGetCurrent使UTC的时间在几秒钟内.但奇怪的是,当到达log语句时,数千秒以适当的速度增加,但在启动时,时间、分钟和秒被冻结。钟手不动。

CACurrentMediaTime显示了人们所期望的更多内容;它准确地显示了自某个时间标记以来已经过去了多少时间,这意味着秒、分钟和小时都在上升。

我想我可以做一个变通的行为,让初始化器将一个常量初始化为TimeIntervalSince1970 - CACurrentMediaTime,然后在引用的代码中添加保存的常量和CACurrentMediaTime。但是,我想知道发生了什么,以及为什么三种计时方法中的两种是输入小时、分钟和秒更新的毫秒的原始数,但是时间、分钟和秒被冻结。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-13 00:57:28

对于双重使用fmod(),而不是fmodf()

格式可能是:%0.f而不是%lf

毫秒显示是正确的,这一事实表明问题必须在其他单元的数学中,而不是时间方法。

更简单的代码:

代码语言:javascript
复制
double timeStampSeconds = [[NSDate date] timeIntervalSince1970];
double hours   = fmod(timeStampSeconds / 86400, 24);
double minutes = fmod(timeStampSeconds /  3600, 60);
double seconds = fmod(timeStampSeconds,     60);
NSLog(@"Milliseconds: %lf, Hours: %.0f, minutes: %.0f, seconds: %.0f", timeStampSeconds * 1000.0, hours, minutes, seconds);

但总的来说,使用Cocoa方法,如NSDateComponentsNSDateFormatter

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19340533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档