NSTimeInterval 到小时和分钟的错误转换
Posted
技术标签:
【中文标题】NSTimeInterval 到小时和分钟的错误转换【英文标题】:Wrong conversion of NSTimeInterval to hours and minutes 【发布时间】:2015-09-14 16:32:42 【问题描述】:我正在构建一个应用程序,而部分逻辑是总结大量 NSTimeIntervals 并将结果转换为小时和分钟。
我正在使用 for 循环来添加间隔
NSTimeInterval totalInterval = 0;
for (MyObject *currentObject in _myList)
totalInterval += [currentObject.endDate timeIntervalSinceDate:currentObject.startDate];
这个函数将返回一个 NSDateComponents 类型的对象:
// Get conversion to months, days, hours, minutes
unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth;
NSDate *startDate = [self dateByOmittingSeconds:[NSDate date]]; // get the current time
NSDate *endDate = [[NSDate alloc] initWithTimeInterval:totalInterval sinceDate:startDate];
return [[NSCalendar currentCalendar] components:unitFlags fromDate:startDate toDate:endDate options:0];
然后我将其格式化为更易读的类型(NSString)供用户阅读:
- (NSString *)timeFormatted:(NSDateComponents *)workhours
return [NSString stringWithFormat:@"%ldh %ldm", (long)[workhours hour], (long)[workhours minute]];
但是timeFormatted
函数的结果输出14h 11m,而totalInterval中的秒数是正确的(137460s)。
知道为什么会这样吗?
谢谢!
【问题讨论】:
【参考方案1】:没有理由为此使用NSDate
或NSDateComponents
。
NSTimeInterval
是秒数。简单的数学计算得出小时、分钟和秒。
NSInteger hours = totalInterval / 3600;
NSInteger minutes = totalInterval / 60 % 60;
NSInteger seconds = totalInterval % 60;
【讨论】:
之前尝试过这样算术,但遇到了问题,它可以显示 8:58 而不是 8:59 等。你认为这是最好的解决方案吗?记住没有 NSNumbers 的算术可能不准确?totalInterval
是带有小数秒的double
。也许您可以在得到小时、分钟和秒之前舍入totalInterval
。如果您不想要秒,请根据需要调整到最接近的分钟。
我已经进行了调整,以便存储在我的应用程序中的每个 NSDate 将只包含小时和分钟,没有秒或纳秒。它必须是 100% 准确的小时和分钟间隔,绝对没有错误。
问题是关于将totalInterval
转换为小时和分钟。你是说totalInterval
不正确吗?这是一个完全不同的问题/问题。
totalInterval 是正确的,但我必须确保以小时和分钟为单位显示的结果完全正确,没有计算错误的机会。如果你能确认确实如此,那么简单的算术就可以解决我的问题以上是关于NSTimeInterval 到小时和分钟的错误转换的主要内容,如果未能解决你的问题,请参考以下文章
swift 从NSTimeInterval转换为swift中的小时,分钟,秒,毫秒 - 来自http://stackoverflow.com/questions/28872450/conversi