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 设置包含日期的itemscrollView

-(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,会比较传入单元以及比传入单元大得单元上数据是否相等,同时传入YearMonth结果错误

        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
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值