最近有一个功能,需要计算同一天内两个时间之间的差值,开始打算将NSDate
先转换成NSString
,然后转后成int
类型数据进行换算对比。
但是这种方法太过繁琐,时间之间的对比要逐一对比小时分钟,然后还要将结果进行转换,实在是麻烦。这里我使用了NSCalendar
类。
下面来看一下具体的实现:
首先先拿到当前时间,并转换成字符串:
//获取当前时间
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSString *dateStr = [formatter stringFromDate:date];
同样也将要比较的时间(我们这里将其称为开始时间)转换成相同格式的字符串:
//开始时间
NSString *beginTime = dict[@"BeginTime"];
下面进入正题,比较两个时间字符串:
//计算当前时间和开始时间的差值
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth
| NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
//对比时间差
NSDateComponents *component = [calendar components:unit fromDate:beginDate toDate:nowDate options:0];
NSLog(@"年差额 = %ld, 月差额 = %ld, 日差额 = %ld, 小时差额 = %ld, 分钟差额 = %ld, 秒差额 = %ld",(long)component.year,component.month,component.day,component.hour,component.minute,component.second);
这样我们就分别得到了年、月、日、时、分、秒的差额,如果你想要得到一个时间相差总额,比如说一天内两个时间点之间的总差额,你只需要进行简单的计算:component.hour *60 + component.minute
即可得到两个时间总共相差的分钟数。