您的位置:首页 > 移动开发 > IOS开发

iOS 计算两个日期之前相隔多少晚

2014-01-19 16:00 337 查看
iOS的NSCalendar可以计算两个日期之间相隔的天数,代码如下:

- (NSInteger)daysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate{
NSLog(@"start:%@", startDate);
NSLog(@"end:%@", endDate);
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

unsigned int unitFlags = NSDayCalendarUnit;
NSDateComponents *comps = [gregorian components:unitFlags fromDate:startDate  toDate:endDate  options:0];
NSLog(@"day:%d", [comps day]);
return [comps day];
}
但这样得到的结果有时会出现下面的现象,

start:2014-01-19 04:15:22 +0000

end:2014-01-20 04:15:22 +0000

day:1

start:2014-01-19 04:15:44 +0000

end:2014-01-21 04:15:33 +0000

day:1

在stackoverflow上找到了一个可行的方法,经稍微改进,现在可以只计算日期,忽略时间,得到两个日期之间相差多少晚,代码如下:

- (NSInteger)daysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate{
NSDateFormatter *temp = [[NSDateFormatter alloc] init];
[temp setDateFormat:@"yyyy-MM-dd"];
NSDate *stDt = [temp dateFromString:[temp stringFromDate:startDate]];
NSDate *endDt =  [temp dateFromString:[temp stringFromDate:endDate]];

NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:stDt];
stDt = [stDt dateByAddingTimeInterval: interval];

interval = [zone secondsFromGMTForDate:endDt];
endDt = [endDt dateByAddingTimeInterval:interval];

unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [self.calendar components:unitFlags fromDate:stDt  toDate:endDt  options:0];

return [comps day];
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: