最近在做一个蓝牙项目中需要用到日历,从网上浏览第三方的日历控件都不能满足需求,于是就考虑自定日历控件来满足需求。日历效果如下
要解决问题?
1.判断当前的日期是星期几
2.判断当前的这个月有多少天(还得判断当前的年是否闰年)
3.怎么获取下个月和上个月(有跨年的情况)
问题一: 好像是无从下手,但是查阅相关资料,苹果提供了相关的类来解决。 具体实现如下:
//输入日期输出星期几
- (NSString*)weekdayStringFromDate:(NSDate*)inputDate {
NSArray*weekdays = [NSArrayarrayWithObjects: [NSNullnull],@"星期天",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六",nil];
NSCalendar*calendar = [[NSCalendaralloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSTimeZone*timeZone = [[NSTimeZonealloc]initWithName:@"Asia/Shanghai"];
[calendarsetTimeZone: timeZone];
NSCalendarUnitcalendarUnit =NSCalendarUnitWeekday;
NSDateComponents*theComponents = [calendarcomponents:calendarUnitfromDate:inputDate];
return[weekdaysobjectAtIndex:theComponents.weekday];
}
其中weekdays可以自定义,可以填写一、二、三等等,根据具体的情况修改。
问题二:判断一个月有多天不难,最笨的方法直接用条件语句来判断输出这个月有多少天,但需要注意的是必须判断当前的年是否是闰年,这里提供另外一种方法来解决。同样还是利用苹果提供的类来实现。具体的方案如下:
//输入日期输出当月的天数
- (NSInteger)dayIntegerFromDate:(NSDate*)inputDate {
NSCalendar*calendar = [NSCalendarcurrentCalendar];
NSRangerange = [calendarrangeOfUnit:NSCalendarUnitDayinUnit:NSCalendarUnitMonthforDate:inputDate];
returnrange.length;
}
问题三:其实要解决这个问题并不难,最直接的方案就是推算,不过在推算的过程中需要注意跨年的情况。另一种方案是利用苹果提供的类来解决是最简单的,具体的实现如下:
//输入日期输出上个月日期
- (NSDate*)lastMonth:(NSDate*)date{
NSDateComponents*dateComponents = [[NSDateComponentsalloc]init];
dateComponents.month= -1;
NSDate*newDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:dateComponentstoDate:dateoptions:0];
returnnewDate;
}
// //输入日期输出下个月日期
- (NSDate*)nextMonth:(NSDate*)date{
NSDateComponents*dateComponents = [[NSDateComponentsalloc]init];
dateComponents.month= +1;
NSDate*newDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:dateComponentstoDate:dateoptions:0];
returnnewDate;
}
到此难点完全解决。效果图如下:
最后附上完整的文件,控件还要不断的优化,有设计不合理的地方请多多包含。
https://pan.baidu.com/s/1dEAWzlR