您的位置:首页 > 其它

NSDate,NSCalendar,制作日历简单实用的方法

2015-10-23 18:43 429 查看
网上找的一些关于 NSDate,NSCalendar,制作日历简单实用的方法的用法,收藏下来;

以下内容转自 http://www.0531s.com/content-39-1040313-1.html
//1. self代表的是调用方法的时间NSDate类型.这是在NSDate的类目中增加的方法

//获取当前的年

-(int)year {

NSCalendar *gregorian = [[NSCalendar alloc]

initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *components = [gregorian components:NSCalendarUnitYear fromDate:self];

return [components year];

}

//获取当前的月

-(int)month {

NSCalendar *gregorian = [[NSCalendar alloc]

initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *components = [gregorian components:NSCalendarUnitMonth fromDate:self];

return [components month];

}

//获取当前的日

-(int)day {

NSCalendar *gregorian = [[NSCalendar alloc]

initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *components = [gregorian components:NSCalendarUnitDay fromDate:self];

return [components day];

}

//获取当前月有多少天

- (NSUInteger)numberOfDaysInCurrentMonth

{

// 频繁调用 [NSCalendar currentCalendar] 可能存在性能问题

return [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonthforDate:self].length;

}

//获得一月的第一天为星期几

-(int)firstWeekDayInMonth {

NSCalendar *gregorian = [[NSCalendar alloc]

initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

[gregorian setFirstWeekday:1];

//[gregorian setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]];

//Set date to first of month

NSDateComponents *comps = [gregorian components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self];

[comps setDay:1];

NSDate *newDate = [gregorian dateFromComponents:comps];

return (8 - [gregorian ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonthforDate:newDate]);

}

//减去第一周的天数,剩余天数除以7,得到倍数和余数, 获得一个月有几周

- (NSUInteger)numberOfWeeksInCurrentMonth

{

NSUInteger weeks = 0;

NSUInteger weekday = [self firstWeekDayInMonth];

if (weekday > 0) {

weeks += 1;

}

NSUInteger monthDays = [self numberOfDaysInCurrentMonth];

weeks = weeks + (monthDays - weekday)/7;

if ((monthDays - weekday) %7 > 0) {

weeks += 1;

}

return weeks;

}

//2.在调用方法的类中写方法

//上一个月的日期

- (NSDate *)lastMonthDate:(NSDate *)date

{

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *components = [calendar components:(NSCalendarUnitWeekday | NSCalendarUnitMonth |NSCalendarUnitYear | NSCalendarUnitDay) fromDate:date];

if ([components month] == 1) {

[components setMonth:12];

[components setYear:[components year] - 1];

} else {

[components setMonth:[components month] - 1];

}

NSDate *lastMonth = [calendar dateFromComponents:components];

return lastMonth;

}

//下一个月的日期

- (NSDate *)nextMonthDate:(NSDate *)date

{

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *components = [calendar components:(NSCalendarUnitWeekday|NSCalendarUnitMonth |NSCalendarUnitYear | NSCalendarUnitDay) fromDate:date];

if ([components month] == 12) {

[components setMonth:1];

[components setYear:[components year] + 1];

} else {

[components setMonth:[components month] + 1];

}

NSDate *lastMonth = [calendar dateFromComponents:components];

return lastMonth;

}

同上可以得到上一年,上一天等等时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: