IOS---如何获取当前的日期和时间(阴历阳历),并显示带阴历阳历24节气的日历

创建两个UILable: Lable1,Lable2.创建好IBOutlate并连线, 然后用如下方法:

-(void)updateLabel {

NSDate* now = [NSDate date];

NSCalendar *cal = [NSCalendar currentCalendar];

unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit;

NSDateComponents *dd = [cal components:unitFlags fromDate:now];

int y = [dd year];

int m = [dd month];

int d = [dd day];

int hour = [dd hour];

int min = [dd minute];

int sec = [dd second];

Lable1.text = [NSString stringWithFormat:@"2d%:2d%:2d%",y,m,d];

Lable2.text =[NSStrinstringWithFormat:@"2d%:2d%:2d%",hour,min,sec];

}

- (void)onTimer {

[viewController updateLabel];

}

在AppDeletate.m文件中增加如下方法:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

timer = [NSTimer scheduledTimerWithTimeInterval:(1.0) target:selfselector:@selector(onTimer) userInfo:nil repeats:YES];

[window addSubview:viewController.view];

[window makeKeyAndVisible];

}

运行就大功告成了,看效果:

#define ChineseMonths @[@"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",@"九月", @"十月", @"冬月", @"腊月"]

#define ChineseFestival @[@"除夕",@"春节",@"中秋",@"五一",@"国庆",@"儿童",@"圣诞",@"七夕",@"端午"]

#define ChineseDays @[@"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",@"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十", @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十"]

#define ChineseWeatherFestival @[@"立春",@"雨水",@"惊蛰",@"春分",@"清明",@"谷雨",@"立夏",@"小满",@"忙种",@"夏至",@"小暑",@"大暑",@"立秋",@"处暑",@"寒露",@"霜降",@"白露",@"秋分",@"立冬",@"小雪",@"大雪",@"冬至",@"小寒",@"大寒"]

// 获取date当天的农历

- (NSString *)chineseCalendarOfDate:(NSDate *)date {

NSCalendar *chineseCalendar = [NSCalendarcalendarWithIdentifier:NSCalendarIdentifierChinese];

NSDateComponents *components = [chineseCalendarcomponents:NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];

//NSString *dayDate;

NSCalendar *normalDate = [NSCalendarcalendarWithIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *Datecomponents = [normalDatecomponents:NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];

if (components.day ==1 ) {

_day =ChineseMonths[components.month -1];

} else {

_day =ChineseDays[components.day -1];

}

//农历节日

if (components.day ==1 && components.month ==1) {

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[1]]; //春节

} if(components.month ==8 && components.day ==15){

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[2]];//中秋

}elseif(components.day ==1 && components.month ==1){

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[0]];//除夕

}elseif(components.month ==7 && components.day ==7){

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[7]];//七夕

}elseif(components.month ==5 && components.day ==5){

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[8]];//端午

}

//阳历节日

if (Datecomponents.month ==6 && Datecomponents.day ==1) { //儿童节

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[5]];

}elseif(Datecomponents.month ==10 && Datecomponents.day ==1){ //国庆节

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[4]];

}elseif(Datecomponents.month ==5 && Datecomponents.day ==1){ //劳动节

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[3]];

}elseif(Datecomponents.month ==12 && Datecomponents.day ==25){//圣诞节

_day = [NSStringstringWithFormat:@"%@",ChineseFestival[6]];

}

[selfgetLunarSpecialDate:Datecomponents.yearMonth:Datecomponents.monthDay:Datecomponents.day];

//除夕另外提出放在所有节日的末尾执行,除夕是在春节前一天,即把components当天时间前移一天,放在所有节日末尾,避免其他节日全部前移一天

NSTimeInterval timeInterval_day =60 *60 *24;

NSDate *nextDay_date = [NSDatedateWithTimeInterval:timeInterval_daysinceDate:date];

NSCalendar *localeCalendar = [[NSCalendaralloc]initWithCalendarIdentifier:NSChineseCalendar];

unsigned unitFlags =NSYearCalendarUnit |NSMonthCalendarUnit |NSDayCalendarUnit;

components = [localeCalendar components:unitFlagsfromDate:nextDay_date];

if ( 1 == components.month &&1 == components.day ) {

return@"除夕";

}

return_day;

}

代码

// UICalender.h

#import <UIKit/UIKit.h>

@interface UICalender : UIView

- (instancetype)initWithCurrentDate:(NSDate *)date;

@end

// UICalender.m

#import "UICalender.h"

#import "DataCalender.h"

#define Weekdays @[@"日",@"一",@"二",@"三",@"四",@"五",@"六"]

static NSDateFormatter *dateForMattor;

@interface UICalender ()<UIScrollViewDelegate,DataCalenderItemDelegate>

@property(strong,nonatomic)NSDate *date;

@property(strong,nonatomic)UIButton *titleButton;

@property(strong,nonatomic)UIScrollView *scrollView;

@property(strong,nonatomic)DataCalender *leftCalenderItem;

@property(strong,nonatomic)DataCalender *centerCalendarItem;

@property(strong,nonatomic)DataCalender *rightCalenderItem;

@property(strong,nonatomic)UIView *backgroundView;

@property(strong,nonatomic)UIView *dateCheckedView;

@property(strong,nonatomic)UIDatePicker *datePicker;

@end

@implementation UICalender

- (instancetype)initWithCurrentDate:(NSDate *)date{

if (self = [superinit]) {

self.backgroundColor = [UIColorcolorWithRed:236 /255.0 green:236 /255.0blue:236 /255.0alpha:1.0];

self.date = date;//显示当前时间

[selfsetupTitleBar];//设置上层显示的titleBar

[selfsetupWeekHeader];//设置星期的文字显示样式

[selfsetupCalendarItems];//设置日历显示的三个部分

[selfsetupScrollView];

[selfsetFrame:CGRectMake(0,0,DeviceWidth,CGRectGetMaxY(self.scrollView.frame))];

[selfsetCurrentDate:self.date];//设置当前日期的显示

}

returnself;

}

#pragma mark - UImethod

-(UIView *)backgroundView{

if (!_backgroundView) {

_backgroundView = [[UIViewalloc]initWithFrame:self.bounds];

_backgroundView.backgroundColor = [UIColorblackColor];

_backgroundView.alpha =0;

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(hideDatePickerView)];

[_backgroundViewaddGestureRecognizer:tapGesture];

}

[selfaddSubview:_backgroundView];

return_backgroundView;

}

-(UIView *)dateCheckedView{

if (!_dateCheckedView) {

_dateCheckedView = [[UIViewalloc]initWithFrame:CGRectMake(0,44,self.frame.size.width,0)];

_dateCheckedView.backgroundColor = [UIColorwhiteColor];

_dateCheckedView.clipsToBounds =YES;

UIButton *cancelButton = [[UIButtonalloc]initWithFrame:CGRectMake(20,10,32,20)];

cancelButton.titleLabel.font = [UIFontboldSystemFontOfSize:16];

[cancelButton setTitle:@"取消"forState:UIWindowLevelNormal];

[cancelButton setTitleColor:[UIColorredColor]forState:UIControlStateNormal];

[cancelButton addTarget:selfaction:@selector(cancelSelectCurrentData)forControlEvents:UIControlEventTouchUpInside];

[_dateCheckedViewaddSubview:cancelButton];

UIButton *okButton = [[UIButtonalloc]initWithFrame:CGRectMake(self.frame.size.width - 52, 10,32,20)];

okButton.titleLabel.font = [UIFontboldSystemFontOfSize:16];

[okButton setTitle:@"确定"forState:UIControlStateNormal];

[okButton setTitleColor:[UIColorredColor]forState:UIControlStateNormal];

[okButton addTarget:selfaction:@selector(selectCurrentDate)forControlEvents:UIControlEventTouchUpInside];

[_dateCheckedViewaddSubview:okButton];

[_dateCheckedViewaddSubview:self.datePicker];

}

[selfaddSubview:_dateCheckedView];

return_dateCheckedView;

}

-(UIDatePicker *)datePicker{

if (!_datePicker) {

_datePicker = [[UIDatePickeralloc]init];

_datePicker.datePickerMode =UIDatePickerModeDate;

_datePicker.locale = [NSLocalelocaleWithLocaleIdentifier:@"Chinese"];

CGRect frame =_datePicker.frame;

frame.origin =CGPointMake(0,32);

_datePicker.frame = frame;

}

return_datePicker;

}

#pragma mark - 设置星期

-(void)setupWeekHeader{

NSInteger count = [Weekdayscount];

CGFloat weekHeaderSetX =5;

for (int i =0; i < count; i++) {

UILabel * weekdayLable = [[UILabelalloc]initWithFrame:CGRectMake(weekHeaderSetX,50, (DeviceWidth -10) / count,20)];

weekdayLable.textAlignment =NSTextAlignmentCenter;

weekdayLable.text =Weekdays[i];

if (i ==0 || i == count -1) {

weekdayLable.textColor = [UIColorredColor];

}else{

weekdayLable.textColor = [UIColorgrayColor];

}

[selfaddSubview:weekdayLable];

weekHeaderSetX += weekdayLable.frame.size.width;

}

UIView *lineView = [[UIViewalloc]initWithFrame:CGRectMake(15,74,DeviceWidth -30,1)];

lineView.backgroundColor = [UIColorlightGrayColor];

[selfaddSubview:lineView];

}

#pragma 设置包含日期的item的scrollView

-(void)setupScrollView{

self.scrollView.delegate =self;

self.scrollView.pagingEnabled = YES;

self.scrollView.showsHorizontalScrollIndicator = NO;

self.scrollView.showsVerticalScrollIndicator = NO;

[self.scrollViewsetFrame:CGRectMake(0,75,DeviceWidth,self.centerCalendarItem.frame.size.height)];

self.scrollView.contentSize = CGSizeMake(3 *self.scrollView.frame.size.width,self.scrollView.frame.size.height);

self.scrollView.contentOffset = CGPointMake(self.scrollView.frame.size.width,0);

[selfaddSubview:self.scrollView];

}

#pragma mark - 设置日历滑动显示日期

-(void)setupCalendarItems{

self.scrollView = [[UIScrollViewalloc]init];

//左边滑动日期

self.leftCalenderItem = [[DataCalenderalloc]init];

[self.scrollViewaddSubview:self.leftCalenderItem];

//居中显示的日期

CGRect itemFrame =self.leftCalenderItem.frame;

itemFrame.origin.x =DeviceWidth;

self.centerCalendarItem = [[DataCalenderalloc]init];

self.centerCalendarItem.frame = itemFrame;

self.centerCalendarItem.delegate =self;

[self.scrollViewaddSubview:self.centerCalendarItem];

//右边滑动的日期

itemFrame.origin.x =DeviceWidth *2;

self.rightCalenderItem = [[DataCalenderalloc]init];

self.rightCalenderItem.frame = itemFrame;

[self.scrollViewaddSubview:self.rightCalenderItem];

}

-(void)setCurrentDate:(NSDate *)date{

self.centerCalendarItem.date = date;

self.leftCalenderItem.date = [self.centerCalendarItempreviousMonthDate];

self.rightCalenderItem.date = [self.centerCalendarItemnextMonthDate];

[self.titleButtonsetTitle:[selfstringFromDate:self.centerCalendarItem.date]forState:UIControlStateNormal];

}

#pragma mark - Private

-(NSString *)stringFromDate:(NSDate *)date{

if (!dateForMattor) {

dateForMattor = [[NSDateFormatteralloc]init];

[dateForMattorsetDateFormat:@"MM-yyyy"];

}

return [dateForMattorstringFromDate:date];

}

#pragma mark - 月份

-(void)setupTitleBar{ //设置可以翻动月份滚动条

UIView *titleView = [[UIViewalloc]initWithFrame:CGRectMake(0,0,DeviceWidth,44)];

titleView.backgroundColor = [UIColorlightGrayColor];

[selfaddSubview:titleView];

//左键选择上个月

UIButton *leftButton = [[UIButtonalloc]initWithFrame:CGRectMake(5,10,32,24)];

[leftButton setImage:[UIImageimageNamed:@"left"]forState:UIControlStateNormal];

[leftButton addTarget:selfaction:@selector(setPreviousMonthDate)forControlEvents:UIControlEventTouchUpInside];

[titleView addSubview:leftButton];

//右键选择下个月

UIButton *rightButton = [[UIButtonalloc]initWithFrame:CGRectMake(titleView.frame.size.width - 37,10,32,24)];

[rightButton setImage:[UIImageimageNamed:@"right"]forState:UIControlStateNormal];

[rightButton addTarget:selfaction:@selector(setNextMonthDate)forControlEvents:UIControlEventTouchUpInside];

[titleView addSubview:rightButton];

UIButton *titlebButton = [[UIButtonalloc]initWithFrame:CGRectMake(0,0,100,44)];

titlebButton.titleLabel.textColor = [UIColorwhiteColor];

titlebButton.titleLabel.font = [UIFontboldSystemFontOfSize:20];

titlebButton.center = titleView.center;

[titlebButton addTarget:selfaction:@selector(showDatePicker)forControlEvents:UIControlEventTouchUpInside];

[titleView addSubview:titlebButton];

self.titleButton = titlebButton;

}

//重新加载日历的数据

-(void)reloadCalendarItems{

CGPoint weekSetX =self.scrollView.contentOffset;

if (weekSetX.x >self.scrollView.frame.size.width) {

[selfsetNextMonthDate];

}else{

[selfsetPreviousMonthDate];

}

}

#pragma mark - SEL

//选择当前日期

-(void)selectCurrentDate{

[selfsetCurrentDate:self.datePicker.date];

[selfhideDatePickerView];

}

//取消

-(void)cancelSelectCurrentData{

[selfhideDatePickerView];

}

-(void)hideDatePickerView{

[UIViewanimateWithDuration:0.25animations:^{

self.backgroundView.alpha =0;

self.dateCheckedView.frame =CGRectMake(0,44,self.frame.size.width,0);

} completion:^(BOOL finished) {

[self.backgroundViewremoveFromSuperview];

[self.dateCheckedViewremoveFromSuperview];

}];

}

-(void)showDatePicker{

[selfshowDatePickerView];

}

-(void)showDatePickerView{

[UIViewanimateWithDuration:0.25animations:^{

self.backgroundView.alpha =0.4;

self.dateCheckedView.frame =CGRectMake(0,44,self.frame.size.width,250);

}];

}

//跳到下个月

-(void)setNextMonthDate{

[selfsetCurrentDate:[self.centerCalendarItemnextMonthDate]];

}

//跳到上个月

-(void)setPreviousMonthDate{

[selfsetCurrentDate:[self.centerCalendarItempreviousMonthDate]];

}

#pragma mark - 实现代理方法

//UIScrollViewDelegate

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

[selfreloadCalendarItems];

self.scrollView.contentOffset = CGPointMake(self.scrollView.frame.size.width,0);

}

//DataCalenderItemDelegate

-(void)calendarItem:(DataCalender *)item didSelectedDate:(NSDate *)date{

self.date = date;

[selfsetCurrentDate:self.date];

}

@end

//DataCalender.h

#import <UIKit/UIKit.h>

#define DeviceWidth [UIScreen mainScreen].bounds.size.width

@protocol DataCalenderItemDelegate;

@interface DataCalender : UIView

@property (strong ,nonatomic)NSDate *date;

@property (weak ,nonatomic)id<DataCalenderItemDelegate> delegate;

@property (strong ,nonatomic)NSString *day;

@property (strong ,nonatomic)NSString *chineseWeatherDay;

- (NSDate *) nextMonthDate;

- (NSDate *) previousMonthDate;

@end

@protocol DataCalenderItemDelegate <NSObject>

- (void)calendarItem:(DataCalender *)item didSelectedDate:(NSDate *)date;

@end

// //DataCalender.m

#import "DataCalender.h"

@interface DataCalendarCell : UICollectionViewCell

- (UILabel *)dayLabel;

- (UILabel *)chineseDayLabel;

@end

@implementation DataCalendarCell {

UILabel *_dayLabel;

UILabel *_chineseDayLabel;

NSString *day;

}

- (UILabel *)dayLabel {

if (!_dayLabel) {

_dayLabel = [[UILabelalloc]initWithFrame:CGRectMake(0,0,20,20)];

_dayLabel.textAlignment =NSTextAlignmentCenter;

_dayLabel.font = [UIFontsystemFontOfSize:15];

_dayLabel.center =CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2 - 3);

[selfaddSubview:_dayLabel];

}

return_dayLabel;

}

- (UILabel *)chineseDayLabel {

if (!_chineseDayLabel) {

_chineseDayLabel = [[UILabelalloc]initWithFrame:CGRectMake(0,0,20,10)];

_chineseDayLabel.textAlignment =NSTextAlignmentCenter;

_chineseDayLabel.font = [UIFontboldSystemFontOfSize:9];

CGPoint point =_dayLabel.center;

point.y +=15;

_chineseDayLabel.center = point;

[selfaddSubview:_chineseDayLabel];

}

return_chineseDayLabel;

}

@end

#define CollectionViewHorizonMargin 5

#define CollectionViewVerticalMargin 5

#define ChineseMonths @[@"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",@"九月", @"十月", @"冬月", @"腊月"]

#define ChineseFestival @[@"除夕",@"春节",@"中秋",@"五一",@"国庆",@"儿童",@"圣诞",@"七夕",@"端午"]

#define ChineseDays @[@"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",@"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十", @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十"]

#define ChineseWeatherFestival @[@"立春",@"雨水",@"惊蛰",@"春分",@"清明",@"谷雨",@"立夏",@"小满",@"忙种",@"夏至",@"小暑",@"大暑",@"立秋",@"处暑",@"寒露",@"霜降",@"白露",@"秋分",@"立冬",@"小雪",@"大雪",@"冬至",@"小寒",@"大寒"]

typedef NS_ENUM(NSUInteger, DataCalendarMonth) {

DataCalendarMonthPrevious = 0,

DataCalendarMonthCurrent = 1,

DataCalendarMonthNext = 2,

};

@interface DataCalender () <UICollectionViewDataSource,UICollectionViewDelegate>

@property (strong,nonatomic)UICollectionView *collectionView;

@end

@implementation DataCalender

- (instancetype)init {

if (self = [superinit]) {

self.backgroundColor = [UIColorclearColor];

[selfsetupCollectionView];

[selfsetFrame:CGRectMake(0,0,DeviceWidth,self.collectionView.frame.size.height + CollectionViewVerticalMargin *2)];

}

returnself;

}

#pragma mark - Custom Accessors

- (void)setDate:(NSDate *)date {

_date = date;

[self.collectionViewreloadData];

}

#pragma mark - Public

// 获取date的下个月日期

- (NSDate *)nextMonthDate {

NSDateComponents *components = [[NSDateComponentsalloc]init];

components.month =1;

NSDate *nextMonthDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:componentstoDate:self.dateoptions:NSCalendarMatchStrictly];

return nextMonthDate;

}

// 获取date的上个月日期

- (NSDate *)previousMonthDate {

NSDateComponents *components = [[NSDateComponentsalloc]init];

components.month = -1;

NSDate *previousMonthDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:componentstoDate:self.dateoptions:NSCalendarMatchStrictly];

return previousMonthDate;

}

#pragma mark - Private

// collectionView显示日期单元,设置其属性

- (void)setupCollectionView {

CGFloat itemWidth = (DeviceWidth -CollectionViewHorizonMargin *2) / 7;

CGFloat itemHeight = itemWidth;

UICollectionViewFlowLayout *flowLayot = [[UICollectionViewFlowLayoutalloc]init];

flowLayot.sectionInset =UIEdgeInsetsZero;

flowLayot.itemSize =CGSizeMake(itemWidth, itemHeight);

flowLayot.minimumLineSpacing =0;

flowLayot.minimumInteritemSpacing =0;

CGRect collectionViewFrame =CGRectMake(CollectionViewHorizonMargin,CollectionViewVerticalMargin,DeviceWidth - CollectionViewHorizonMargin *2, itemHeight *6);

self.collectionView = [[UICollectionViewalloc]initWithFrame:collectionViewFramecollectionViewLayout:flowLayot];

[selfaddSubview:self.collectionView];

self.collectionView.dataSource = self;

self.collectionView.delegate = self;

self.collectionView.backgroundColor = [UIColor clearColor];

[self.collectionViewregisterClass:[DataCalendarCellclass]forCellWithReuseIdentifier:@"CalendarCell"];

}

// 自动获取date当前月的第一天是星期几

- (NSInteger)weekdayOfFirstDayInDate {

NSCalendar *calendar = [NSCalendarcurrentCalendar];

[calendar setFirstWeekday:1];

NSDateComponents *components = [calendarcomponents:NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self.date];

[components setDay:1];

NSDate *firstDate = [calendardateFromComponents:components];

NSDateComponents *firstComponents = [calendarcomponents:NSCalendarUnitWeekdayfromDate:firstDate];

return firstComponents.weekday -1;

}

// 获取date当前月的总天数

- (NSInteger)totalDaysInMonthOfDate:(NSDate *)date {

NSRange range = [[NSCalendarcurrentCalendar]rangeOfUnit:NSCalendarUnitDayinUnit:NSCalendarUnitMonthforDate:date];

return range.length;

}

// 获取某月day的日期

- (NSDate *)dateOfMonth:(DataCalendarMonth)calendarMonth WithDay:(NSInteger)day {

NSCalendar *calendar = [NSCalendarcurrentCalendar];

NSDate *date;

switch (calendarMonth) {

caseDataCalendarMonthPrevious:

date = [selfpreviousMonthDate];

break;

caseDataCalendarMonthCurrent:

date = self.date;

break;

caseDataCalendarMonthNext:

date = [selfnextMonthDate];

break;

default:

break;

}

NSDateComponents *components = [calendarcomponents:NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];

[components setDay:day];

NSDate *dateOfDay = [calendardateFromComponents:components];

return dateOfDay;

}

#pragma mark - 显示节日节气信息

// 获取date当天的农历

- (NSString *)chineseCalendarOfDate:(NSDate *)date {

NSCalendar *chineseCalendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];

NSDateComponents *components = [chineseCalendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];

//NSString *dayDate;

NSCalendar *normalDate = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *Datecomponents = [normalDate components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];

if (components.day ==1 ) {

_day = ChineseMonths[components.month - 1];

} else {

_day = ChineseDays[components.day - 1];

}

//农历节日

if (components.day ==1 && components.month ==1) {

_day = [NSString stringWithFormat:@"%@",ChineseFestival[1]]; //春节

} if(components.month ==8 && components.day ==15){

_day = [NSString stringWithFormat:@"%@",ChineseFestival[2]];//中秋

}elseif(components.day ==1 && components.month ==1){

_day = [NSString stringWithFormat:@"%@",ChineseFestival[0]];//除夕

}elseif(components.month ==7 && components.day == 7){

_day = [NSString stringWithFormat:@"%@",ChineseFestival[7]];//七夕

}elseif(components.month ==5 && components.day == 5){

_day = [NSString stringWithFormat:@"%@",ChineseFestival[8]];//端午

}

//阳历节日

if (Datecomponents.month ==6 && Datecomponents.day ==1) { //儿童节

_day = [NSString stringWithFormat:@"%@",ChineseFestival[5]];

}elseif(Datecomponents.month ==10 && Datecomponents.day ==1){ //国庆节

_day = [NSString stringWithFormat:@"%@",ChineseFestival[4]];

}elseif(Datecomponents.month ==5 && Datecomponents.day ==1){ //劳动节

_day = [NSString stringWithFormat:@"%@",ChineseFestival[3]];

}elseif(Datecomponents.month ==12 && Datecomponents.day ==25){//圣诞节

_day = [NSString stringWithFormat:@"%@",ChineseFestival[6]];

}

[self getLunarSpecialDate:Datecomponents.year Month:Datecomponents.month Day:Datecomponents.day];

//除夕另外提出放在所有节日的末尾执行,除夕是在春节前一天,即把components当天时间前移一天,放在所有节日末尾,避免其他节日全部前移一天

NSTimeInterval timeInterval_day = 60 *60 *24;

NSDate *nextDay_date = [NSDate dateWithTimeInterval:timeInterval_day sinceDate:date];

NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit;

components = [localeCalendar components:unitFlags fromDate:nextDay_date];

if ( 1 == components.month && 1 == components.day ) {

return@"除夕";

}

return_day;

}

//24节气只有(1901 - 2050)之间为准确的节气

const int START_YEAR =1901;

const int END_YEAR =2050;

static int32_t gLunarHolDay[]=

{

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1901

0X96,0XA4,0X96,0X96,0X97,0X87,0X79,0X79,0X79,0X69,0X78,0X78, //1902

0X96,0XA5,0X87,0X96,0X87,0X87,0X79,0X69,0X69,0X69,0X78,0X78, //1903

0X86,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X78,0X87, //1904

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1905

0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1906

0X96,0XA5,0X87,0X96,0X87,0X87,0X79,0X69,0X69,0X69,0X78,0X78, //1907

0X86,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1908

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1909

0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1910

0X96,0XA5,0X87,0X96,0X87,0X87,0X79,0X69,0X69,0X69,0X78,0X78, //1911

0X86,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1912

0X95,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1913

0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1914

0X96,0XA5,0X97,0X96,0X97,0X87,0X79,0X79,0X69,0X69,0X78,0X78, //1915

0X96,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1916

0X95,0XB4,0X96,0XA6,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X87, //1917

0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X77, //1918

0X96,0XA5,0X97,0X96,0X97,0X87,0X79,0X79,0X69,0X69,0X78,0X78, //1919

0X96,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1920

0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X87, //1921

0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X77, //1922

0X96,0XA4,0X96,0X96,0X97,0X87,0X79,0X79,0X69,0X69,0X78,0X78, //1923

0X96,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1924

0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X87, //1925

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1926

0X96,0XA4,0X96,0X96,0X97,0X87,0X79,0X79,0X79,0X69,0X78,0X78, //1927

0X96,0XA5,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1928

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1929

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1930

0X96,0XA4,0X96,0X96,0X97,0X87,0X79,0X79,0X79,0X69,0X78,0X78, //1931

0X96,0XA5,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1932

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1933

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1934

0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1935

0X96,0XA5,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1936

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1937

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1938

0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1939

0X96,0XA5,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1940

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1941

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1942

0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1943

0X96,0XA5,0X96,0XA5,0XA6,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1944

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1945

0X95,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X78,0X69,0X78,0X77, //1946

0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1947

0X96,0XA5,0XA6,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //1948

0XA5,0XB4,0X96,0XA5,0X96,0X97,0X88,0X79,0X78,0X79,0X77,0X87, //1949

0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X77, //1950

0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78, //1951

0X96,0XA5,0XA6,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //1952

0XA5,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1953

0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X68,0X78,0X87, //1954

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1955

0X96,0XA5,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //1956

0XA5,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1957

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1958

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1959

0X96,0XA4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87, //1960

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1961

0X96,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1962

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1963

0X96,0XA4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87, //1964

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1965

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1966

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1967

0X96,0XA4,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //1968

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1969

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1970

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77, //1971

0X96,0XA4,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //1972

0XA5,0XB5,0X96,0XA5,0XA6,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1973

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1974

0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X78,0X69,0X78,0X77, //1975

0X96,0XA4,0XA5,0XB5,0XA6,0XA6,0X88,0X89,0X88,0X78,0X87,0X87, //1976

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //1977

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X78,0X87, //1978

0X96,0XB4,0X96,0XA6,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X77, //1979

0X96,0XA4,0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //1980

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X77,0X87, //1981

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1982

0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X77, //1983

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X87, //1984

0XA5,0XB4,0XA6,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //1985

0XA5,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //1986

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X79,0X78,0X69,0X78,0X87, //1987

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //1988

0XA5,0XB4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87, //1989

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X79,0X77,0X87, //1990

0X95,0XB4,0X96,0XA5,0X86,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1991

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //1992

0XA5,0XB3,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87, //1993

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1994

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X76,0X78,0X69,0X78,0X87, //1995

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //1996

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //1997

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //1998

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //1999

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //2000

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2001

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //2002

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //2003

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //2004

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2005

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2006

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87, //2007

0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X87,0X78,0X87,0X86, //2008

0XA5,0XB3,0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2009

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2010

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X78,0X87, //2011

0X96,0XB4,0XA5,0XB5,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86, //2012

0XA5,0XB3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X87, //2013

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2014

0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87, //2015

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86, //2016

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X87, //2017

0XA5,0XB4,0XA6,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2018

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X79,0X77,0X87, //2019

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X86, //2020

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //2021

0XA5,0XB4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87, //2022

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X79,0X77,0X87, //2023

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96, //2024

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //2025

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2026

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //2027

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96, //2028

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //2029

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2030

0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87, //2031

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96, //2032

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X86, //2033

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X78,0X88,0X78,0X87,0X87, //2034

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2035

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96, //2036

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86, //2037

0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2038

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2039

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96, //2040

0XA5,0XC3,0XA5,0XB5,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86, //2041

0XA5,0XB3,0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87, //2042

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2043

0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X88,0X87,0X96, //2044

0XA5,0XC3,0XA5,0XB4,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86, //2045

0XA5,0XB3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X87, //2046

0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87, //2047

0X95,0XB4,0XA5,0XB4,0XA5,0XA5,0X97,0X87,0X87,0X88,0X86,0X96, //2048

0XA4,0XC3,0XA5,0XA5,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X86, //2049

0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X78,0X78,0X87,0X87 //2050

};

-(NSString *)getLunarSpecialDate:(NSInteger)iYear Month:(NSInteger)iMonth Day:(NSInteger)iDay {

NSArray *chineseDays=[NSArrayarrayWithObjects:

@"小寒",@"大寒",@"立春",@"雨水",@"惊蛰",@"春分",

@"清明",@"谷雨",@"立夏",@"小满",@"芒种",@"夏至",

@"小暑",@"大暑",@"立秋",@"处暑",@"白露",@"秋分",

@"寒露",@"霜降",@"立冬",@"小雪",@"大雪",@"冬至",nil];

long array_index = (iYear -START_YEAR)*12+iMonth -1 ;

int64_t flag =gLunarHolDay[array_index];

int64_t day;

if(iDay <15)

day= 15 - ((flag>>4)&0x0f);

else

day = ((flag)&0x0f)+15;

long index = -1;

if(iDay == day){

index = (iMonth-1) *2 + (iDay>15?1:0);

}

if ( index >=0 && index < [chineseDayscount] ) {

[chineseDays objectAtIndex:index];

//NSLog(@"%@",chineseDays[index]);

_day = chineseDays[index];

return_day;

} else {

returnnil;

}

}

#pragma mark - UICollectionDatasource数据源协议

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

return42;

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

staticNSString *identifier =@"CalendarCell";

DataCalendarCell *cell = [self.collectionViewdequeueReusableCellWithReuseIdentifier:identifierforIndexPath:indexPath];

cell.backgroundColor = [UIColorclearColor];

cell.dayLabel.textColor = [UIColorblackColor];

cell.chineseDayLabel.textColor = [UIColorgrayColor];

NSInteger firstWeekday = [selfweekdayOfFirstDayInDate];

NSInteger totalDaysOfMonth = [selftotalDaysInMonthOfDate:self.date];

NSInteger totalDaysOfLastMonth = [selftotalDaysInMonthOfDate:[selfpreviousMonthDate]];

//在当前月份中显示上个月天数用灰色字体填满整个月份表

//算法:

//月份的头如果当前cell的下标小于当前第一个cell的数值,则把字体设置灰色

//月份的尾同理如果当前的cell的下标大于等于当前cell +当月起始日期的星期几,则把字体设置灰色

if (indexPath.row < firstWeekday) { //小于这个月的第一天

NSInteger day = totalDaysOfLastMonth - firstWeekday + indexPath.row +1;

cell.dayLabel.text = [NSStringstringWithFormat:@"%ld ", day];

cell.dayLabel.textColor = [UIColorgrayColor];

cell.chineseDayLabel.text = [selfchineseCalendarOfDate:[selfdateOfMonth:DataCalendarMonthPreviousWithDay:day]];

} elseif (indexPath.row >= totalDaysOfMonth + firstWeekday) { //大于这个月的最后一天

NSInteger day = indexPath.row - totalDaysOfMonth - firstWeekday +1;

cell.dayLabel.text = [NSStringstringWithFormat:@"%ld", day];

cell.dayLabel.textColor = [UIColorgrayColor];

cell.chineseDayLabel.text = [selfchineseCalendarOfDate:[selfdateOfMonth:DataCalendarMonthNextWithDay:day]];

} else { //属于这个月

NSInteger day = indexPath.row - firstWeekday +1;

cell.dayLabel.text= [NSStringstringWithFormat:@"%ld", day];

if (day == [[NSCalendarcurrentCalendar]component:NSCalendarUnitDayfromDate:self.date]) {

cell.backgroundColor = [UIColorblueColor];

cell.layer.cornerRadius = cell.frame.size.height / 5;

cell.dayLabel.textColor = [UIColorwhiteColor];

cell.chineseDayLabel.textColor = [UIColorwhiteColor];

}

// 如果日期和当期日期同年同月不同天,注:第一个判断中的方法是iOS8的新API,会比较传入单元以及比传入单元大得单元上数据是否相等,同时传入Year和Month结果错误

if ([[NSCalendarcurrentCalendar]isDate:[NSDatedate]equalToDate:self.datetoUnitGranularity:NSCalendarUnitMonth] && ![[NSCalendarcurrentCalendar]isDateInToday:self.date]) {

// 将当前日期的那天高亮显示

if (day == [[NSCalendarcurrentCalendar]component:NSCalendarUnitDayfromDate:[NSDatedate]]) {

cell.dayLabel.textColor = [UIColorgreenColor];

}

}

cell.chineseDayLabel.text = [selfchineseCalendarOfDate:[selfdateOfMonth:DataCalendarMonthCurrentWithDay:day]];

}

//周日周六的日期显示红色

if (indexPath.item %7 ==6 || indexPath.item %7 ==0) {

cell.dayLabel.textColor = [UIColorredColor];

}

return cell;

}

#pragma mark - UICollectionViewDelegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

NSDateComponents *components = [[NSCalendarcurrentCalendar]components:NSCalendarUnitYear |NSCalendarUnitMonth |NSCalendarUnitDay fromDate:self.date];

NSInteger firstWeekday = [selfweekdayOfFirstDayInDate];

[components setDay:indexPath.row - firstWeekday +1];

NSDate *selectedDate = [[NSCalendarcurrentCalendar]dateFromComponents:components];

if (self.delegate && [self.delegaterespondsToSelector:@selector(calendarItem:didSelectedDate:)]) {

[self.delegatecalendarItem:selfdidSelectedDate:selectedDate];

}

}

@end

最后附上Demo地址:https://github.com/YuLeiJack/IOSCalender

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值