我有一个跨越多年的时间间隔,我希望所有的时间组件从一年到几秒.
我的第一个想法是将一年中的时间间隔除以整数秒,从运行的总秒数中减去该值,将其除以一个月中的秒数,从运行总计中减去该值,依此类推.
这看起来很复杂,我已经读过,无论何时你做一些看起来错综复杂的事情,都可能有内置的方法.
在那儿?
我将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设置),但它经常关闭.这证明存在不准确性,但我无法弄清楚它来自哪里,可以吗?
我正在尝试在下载后添加AdColony.h frameWork,但是我在Xcode 5中找不到它.我能够在最后一个版本中找到它,但是在这个版本中找不到它.
在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?
mach_timebase_info始终返回1/1作为缩放因子,因为CPU的原始滴答计数不可靠(动态速度步进),因此API会为您进行缩放.在PowerPC Mac上,mach_timebase_info返回1000000000/33333335或1000000000/25000000,因此Apple提供的代码每隔几分钟就会溢出一次.哎呀.