在开发过程中, 会经常碰到时间日期的计算, 今天闲暇之余将笔记中关于日历、时间和日期的记录分享一下(虽然网上有很多)...
1. 获取当前月份
//
#pragma mark 获取当前月份
+ (NSString *)currentMouth {
//获取当前时间日期
NSDate *currentDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM"];
NSString *dateString = [dateFormatter stringFromDate:currentDate];
return dateString;
}
2. 获取当前月份的天数
#pragma mark 获取当前月份的天数
+ (NSInteger)numberOfDaysInCurrentMonth {
// 初始化日历
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 获取系统当前日期
NSDate *currentDate = [NSDate date];
// 获取当前日期中当前月中天的范围
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:currentDate];
// 得到当前月中总共有多少天(即范围的长度)
NSInteger numberOfDaysInCurrentMonth = range.length;
return numberOfDaysInCurrentMonth;
}
3. 获取当前月中共有多少周
#pragma mark 获取当前月中共有多少周
+ (NSInteger)numberOfWeeksInCurrentMonth {
// 初始化日历
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 获取系统当前日期
NSDate *currentDate = [NSDate date];
// 获取当前日期中当前月中周的范围
NSRange range = [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:currentDate];
// 得到当前月中总共有多少周(即范围的长度)
NSInteger numberOfWeeksInCurrentMonth = range.length;
return numberOfWeeksInCurrentMonth;
}
5. 获取 上个月的天数
#pragma mark 获取 上个月的天数
+ (NSInteger)getBeforeNumberOfDaysInMonth {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *currentDate = [NSDate date];
NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
// [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
[lastMonthComps setMonth:-1];
NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
// 只要个时间给日历,就会帮你计算出来。这里的时间取当前的时间。
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay
inUnit: NSCalendarUnitMonth
forDate:newdate];
//NSLog(@"当月天数 = %lu",(unsigned long)range.length);
return range.length;
}
6. 获取下个月份
#pragma mark 获取下个月份
+ (NSString *)nextMonth {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *currentDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM"];
NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
// [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
[lastMonthComps setMonth:1];
NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
NSString *dateStr = [dateFormatter stringFromDate:newdate];
//NSLog(@"date str = %@",dateStr);
return dateStr;
}
7. 获取 下个月的天数
#pragma mark 获取 下个月的天数
+ (NSInteger)getNextNumberOfDaysInMonth {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *currentDate = [NSDate date];
NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
// [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
[lastMonthComps setMonth:1];
NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
// 只要个时间给日历,就会帮你计算出来。这里的时间取当前的时间。
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay
inUnit: NSCalendarUnitMonth
forDate:newdate];
//NSLog(@"当月天数 = %lu",(unsigned long)range.length);
return range.length;
}
8. 获取当前月中第一天在一周内的索引
#pragma mark 获取当前月中第一天在一周内的索引
+ (NSInteger)indexOfWeekForFirstDayInCurrentMonth {
// 初始化日历
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 获取系统当前日期
NSDate *currentDate = [NSDate date];
// 获取当前月中的第一天的日期
NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:currentDate];
[dateComponents setDay:1];
NSDate *beginDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
NSDateComponents *beginDateComponents = [calendar components:NSCalendarUnitWeekday fromDate:beginDate];// 当前月中的第一天的日期组件
NSInteger indexOfWeek = ([beginDateComponents weekday] + 6) % 7;// 将格式:日一, ……,五, 六 转换成格式:一二, ……, 六 日,获得索引
return indexOfWeek;
}
9. 获取当天在当月中的索引(第几天)
#pragma mark 获取当天在当月中的索引(第几天)
+ (NSInteger)indexOfMonthForTodayInCurrentMonth {
// 初始化日历
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 获取系统当前日期
NSDate *currentDate = [NSDate date];
// 获取当前日期的组件
NSDateComponents *dateComponents = [calendar components:NSCalendarUnitDay fromDate:currentDate];
NSInteger indexOfMonthForTodayInCurrentMonth = [dateComponents day];
return indexOfMonthForTodayInCurrentMonth;
}
最后
NSCalendar 是一个功能虽然强大,但同时多次初始化可能会造成性能较低,如果在程序从多次使用,可以定义为全局变量,尽量避免过多的初始化
如果这篇文章对您有些许帮助 请给我点个心哦。
网友评论