日历(NSCalendar) 发表于 2018-06-08 | 更新于 2018-06-09 | 分类于 iOS 12345678910111213141516171819202122232425262728293031//日历static const NSCalendarUnit CalendarUnitYMD = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;NSCalendar *calendar = [NSCalendar currentCalendar];//计算当月第一天NSDateComponents *component = [calendar components:CalendarUnitYMD fromDate:[NSDate date]];[component setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];component.day = 1;NSDate *currentDateFirstMonthDay = [calendar dateFromComponents:component];NSLog(@"%@", currentDateFirstMonthDay);//计算当月最后一天component.month++;component.day = 0;NSLog(@"%@", [calendar dateFromComponents:component]);//计算相对日期NSDateComponents *offsetComponent = [[NSDateComponents alloc] init];offsetComponent.day = 50;NSLog(@"%@", [calendar dateByAddingComponents:offsetComponent toDate:currentDateFirstMonthDay options:0]);//日期对应的星期NSArray *weekDaySymbols = [[[NSDateFormatter alloc] init] shortWeekdaySymbols];NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekday fromDate:currentDateFirstMonthDay];NSLog(@"%@", weekDaySymbols[dateComponents.weekday - 1]);//每个月的周数,iOS8以下使用NSWeekCalendarUnit代替NSCalendarUnitWeekOfMonthNSRange rangeOfweeks = [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:currentDateFirstMonthDay];NSLog(@"%ld", (long)rangeOfweeks.length);//计算日期间的天数,通过修改NSCalendarUnit可以间隔的月、年等等NSLog(@"%ld", (long)[calendar components:NSCalendarUnitDay fromDate:currentDateFirstMonthDay toDate:[NSDate date] options:0].day); 控制台输出 1234562016-01-26 23:11:27.038 Test123[6502:707948] 2016-01-01 00:00:00 +00002016-01-26 23:11:27.038 Test123[6502:707948] 2016-01-31 00:00:00 +00002016-01-26 23:11:27.038 Test123[6502:707948] 2016-02-20 00:00:00 +00002016-01-26 23:11:27.039 Test123[6502:707948] 周五2016-01-26 23:11:27.039 Test123[6502:707948] 62016-01-26 23:11:27.040 Test123[6502:707948] 25