【发布时间】:2010-11-17 06:57:56
【问题描述】:
我有一个跨年的时间间隔,我想要从年到秒的所有时间组件。
我的第一个想法是将时间间隔除以一年中的秒数,从运行总秒数中减去,再除以一个月中的秒数,从运行总和中减去,等等。
这似乎令人费解,我读到,每当您做一些看起来令人费解的事情时,可能有一个内置方法。
有吗?
我将 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);
当我将日期选择器设置为过去 1 年零 1 天的日期时,我得到:
1 年 1 个月 1 天 16 小时 0 分 20 秒
这是 1 个月零 16 小时的休息时间。如果我将日期选择器设置为过去 1 天,我会减少相同的数量。
更新:我有一个应用程序可以根据您的生日(从 UIDatePicker 设置)计算您的年龄(以岁为单位),但它经常关闭。这证明有一个不准确的地方,但我不知道它来自哪里,你能吗?
【问题讨论】:
-
如果您将日期选择器设置为一天前,您会延迟 1 个月零 16 小时吗?
-
是的,休息 1 个月 16 小时。
-
如果结果始终是 1 个月零 16 小时,无论您选择什么值,您要么从变量中减去该值,使用移位,要么您需要评估该错误的来源。我的猜测是,如果您的时间间隔总是不正确,那么您的时间间隔就有问题。
标签: iphone cocoa time nstimeinterval