相关疑难解决方法(0)

如何在iPhone上将NSTimeInterval分解为年,月,日,小时,分钟和秒?

我有一个跨越多年的时间间隔,我希望所有的时间组件从一年到几秒.

我的第一个想法是将一年中的时间间隔除以整数秒,从运行的总秒数中减去该值,将其除以一个月中的秒数,从运行总计中减去该值,依此类推.

这看起来很复杂,我已经读过,无论何时你做一些看起来错综复杂的事情,都可能有内置的方法.

在那儿?

我将Alex的第二种方法整合到我的代码中.

它位于我的界面中由UIDatePicker调用的方法中.

NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];

NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;

sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;

NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);
Run Code Online (Sandbox Code Playgroud)

当我将日期选择器设置为过去1年和1天的日期时,我得到:

1年1个月1天16小时0分20秒

这是1个月和16个小时.如果我将日期选择器设置为过去的1天,我的数量相同.

更新:我有一个应用程序,计算你的年龄,给定你的生日(从UIDatePicker设置),但它经常关闭.这证明存在不准确性,但我无法弄清楚它来自哪里,可以吗?

iphone time cocoa nstimeinterval

55
推荐指数
3
解决办法
5万
查看次数

如何在Xcode 5中添加现有框架

我正在尝试在下载后添加AdColony.h frameWork,但是我在Xcode 5中找不到它.我能够在最后一个版本中找到它,但是在这个版本中找不到它.

xcode frameworks

43
推荐指数
3
解决办法
5万
查看次数

如何在不溢出的情况下使用mach_absolute_time?

在Darwin上,POSIX标准clock_gettime(CLOCK_MONOTONIC)计时器不可用.相反,最高分辨率的单调计时器是通过mach_absolute_time函数获得的mach/mach_time.h.

返回的结果可能是来自处理器的未调整的滴答计数,在这种情况下,时间单位可能是奇怪的倍数.例如,在具有33MHz滴答计数的CPU上,Darwin返回1000000000/33333335作为返回结果的确切单位(即,乘以该mach_absolute_time分数以获得纳秒值).

我们通常希望将精确刻度转换为"标准"(十进制)单位,但不幸的是,即使在64位算术中,绝对时间乘以分数也会溢出.这是苹果公司唯一的文件归属mach_absolute_time于(技术问答QA1398).1

我该如何编写正确使用的函数mach_absolute_time


  1. 请注意,这不是一个理论问题:QA1398中的示例代码完全无法在基于PowerPC的Mac上运行.在Intel Mac上,mach_timebase_info始终返回1/1作为缩放因子,因为CPU的原始滴答计数不可靠(动态速度步进),因此API会为您进行缩放.在PowerPC Mac上,mach_timebase_info返回1000000000/33333335或1000000000/25000000,因此Apple提供的代码每隔几分钟就会溢出一次.哎呀.

macos x86 posix powerpc darwin

13
推荐指数
2
解决办法
6567
查看次数

标签 统计

cocoa ×1

darwin ×1

frameworks ×1

iphone ×1

macos ×1

nstimeinterval ×1

posix ×1

powerpc ×1

time ×1

x86 ×1

xcode ×1