获取一天中两个时间之间的时间差(涉及IT技术)

6

我已经尝试使用NSDate,但没有成功。

我想知道例如14:10和18:30之间的差异。

以小时和分钟为单位。

希望您能帮助我,这应该不太复杂 :)


你希望如何呈现差异?使用NSString、NSNumber、int、float、另一个NSDate? - Eimantas
4个回答

30

不需要手动计算,可以看一下 NSCalendar。如果想要获取两个日期之间的小时和分钟,请使用类似以下的方法:

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit;
NSDateComponents *components = [gregorianCalendar components:unitFlags
                                                    fromDate:firstDate
                                                      toDate:otherDate
                                                     options:0];
[gregorianCalendar release];

现在你已经有了小时和分钟的NSDateComponents,可以像[components hour][components minute]这样访问它们的NSIntegers。这对于跨越多天、闰年和其他有趣的事情的小时也适用。


19

这是我的快速解决方案:

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setDateFormat:@"HH:mm"];
NSDate *date1 = [df dateFromString:@"14:10"];
NSDate *date2 = [df dateFromString:@"18:09"];
NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];
int hours = (int)interval / 3600;             // integer division to get the hours part
int minutes = (interval - (hours*3600)) / 60; // interval minus hours part (in seconds) divided by 60 yields minutes
NSString *timeDiff = [NSString stringWithFormat:@"%d:%02d", hours, minutes];

谢谢!编译器给我一个错误,说initWithDateFormat...不存在... - user134282
1
抱歉,我使用的是Mac OS SDK编写的。已更正为iPhone SDK。 - amrox

12

NSDate类有一个方法timeIntervalSinceDate,可以做到这一点。

NSTimeInterval secondsBetween = [firstDate timeIntervalSinceDate:secondDate];

NSTimeInterval是一个双精度浮点数,表示两个时间之间的秒数。


然后,您必须进行自己的计算,将秒转换为小时和分钟。然后,您必须将这些数字转换为字符串。这很简单,但经常出现。我建议创建实用程序类来执行此操作并保持方便。 - TechZen
好的,谢谢!现在我有了秒数,所以要得到小时数,我需要除以3600。然后我会得到1546521531。你能给我一些提示吗? - user134282

7
NSString *duration = [self calculateDuration:oldTime secondDate:currentTime];

- (NSString *)calculateDuration:(NSDate *)oldTime secondDate:(NSDate *)currentTime
{
    NSDate *date1 = oldTime;
    NSDate *date2 = currentTime;

    NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];

    int hh = secondsBetween / (60*60);
    double rem = fmod(secondsBetween, (60*60));
    int mm = rem / 60;
    rem = fmod(rem, 60);
    int ss = rem;

    NSString *str = [NSString stringWithFormat:@"%02d:%02d:%02d",hh,mm,ss];

    return str;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接