NSDate
1.NSDate对象用来表示一个具体的时间点;
2.NSDate是一个类簇。我们所使用的NSDate对象,都是NSDate的私有之类的实体;
3.NSDate储存的是GMT时间,使用的时候会根据当前应用指定的时区进行时间上的增减,以供计算或显示
NSCalendar
NSCalendar:日历。对世界上现存的常用历法进行了封装,即提供了不同的历法的时间信息,又支持日历的计算。
NSDateComponents
NSDateComponents:时间容器,一个包含了详细的年月日时分秒的容器。
三者之间的用法
相对时间(从现在往后2年5个月11天10小时,年月日时分秒均可配置)
NSDateComponents * components = [[NSDateComponents alloc] init];
components.year = 2;
components.month = 5;
components.day = 11;
components.hour = 10;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSDate * nextData = [calendar dateByAddingComponents:components toDate:currentDate options:NSCalendarMatchStrictly];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日hh时mm分ss秒";
NSString * str = [formatter stringFromDate:nextData];
NSLog(@"%@",str);
获取指定时间当月的天数
/**
计算某个时间的当月天数
@param targetDate 目标时间
@return 天数
*/
- (NSInteger)getNumberOfDaysInMonth:(NSDate *)targetDate {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];//指定日历的算法
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:targetDate];
return range.length;
}
获取两个时间的天数差
/**
获取两个时间的天数差
@param firstDate 第一个时间
@param secondDate 第二个时间
@return 比较得出的天数差
*/
- (NSInteger)getDateToDateDays:(NSDate *)firstDate withSaveDate:(NSDate *)secondDate {
NSCalendar* chineseClendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSUInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMinute |
NSCalendarUnitSecond | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *cps = [chineseClendar components:unitFlags fromDate:firstDate toDate:secondDate options:0];
NSInteger diffDay = [cps day];
return diffDay;
}
参考文章: