我已经尝试使用NSDate,但没有成功。
我想知道例如14:10和18:30之间的差异。
以小时和分钟为单位。
希望您能帮助我,这应该不太复杂 :)
我已经尝试使用NSDate,但没有成功。
我想知道例如14:10和18: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
。这对于跨越多天、闰年和其他有趣的事情的小时也适用。
这是我的快速解决方案:
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];
NSDate类有一个方法timeIntervalSinceDate,可以做到这一点。
NSTimeInterval secondsBetween = [firstDate timeIntervalSinceDate:secondDate];
NSTimeInterval是一个双精度浮点数,表示两个时间之间的秒数。
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;
}