在学习iOS App开发中遇到需要计算时间差并格式化输出的需求,没有现成的方法,需要结合NSCalendar和NSDateComponents来实现。所以干脆把代码封装成一个熟悉的dateDiff方法。不过这个方法跟VB和sql里的dateDiff还是有点不一样,虽然可以封装成完全一样,不过我觉得直接返回NSDateComponents会更方便,因为所需要的各种单位上的值都包含在其中了。 我是把代码封装到自己的一个工具类KRUtils里作为类方法,使用起来也很方便。代码如下:
/* dateDiff 方法实现 */
+(NSDateComponents *) dateDiff:(NSDate *) fromDate toDate:(NSDate *) toDate
{
NSCalendar *sysCalendar = [NSCalendar currentCalendar];
unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |
NSDayCalendarUnit | NSHourCalendarUnit |
NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *compInfo = [sysCalendar components:unitFlags
fromDate:fromDate
toDate:toDate
options:0];
return compInfo;
}
/* dateDiff 调用示例 */
-(void) demo
{
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSinceNow:86400];
NSDateComponents *diffInfo =[KRUtils dateDiff:date1 toDate:date2];
NSLog(@"相差 %d天%02d小时%02d分钟%02d秒", [diffInfo day],
[diffInfo hour],
[diffInfo minute],
[diffInfo second]);
//输出结果:“相差 1天00小时00分钟00秒”
}