创建两个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

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

  1. sql 日期和当前日期时间差_如何通过excel获取当前的日期和时间

    在用excel处理数据时,通过要获取当前的日期和时间,今天我们就来学习一下如何获取当前的日期和时间. 获取当前日期在B2单元格输入公式:=TODAY() 设置B2单元格里日期的显示格式,看下图 根据需 ...

  2. 批处理获取当前系统日期及时间及星期转换为数字并加以格式美化的bat代码

    代码如下: @echo off&setlocal enabledelayedexpansion ::批处理获取当前系统日期及时间并格式美化的bat代码 echo 读取系统日期和时间(普通) e ...

  3. 获取当前系统日期和时间

    第一种方法 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// ...

  4. 根据时间戳获取相应的日期和时间

    System.currentTimeMillis()返回的是格林威治时间从1970年1月1日00时00分00秒开始到现在的总毫秒数,(注意是格林威治时间)北京时间是1970年01月01日08时00分0 ...

  5. Python分别使用datetime和time获取当前的日期和时间

    笔者小白在最近做qq聊天记录分析的过程中遇到了一个需要利用当前时间的问题.现在将Python中利用datetime和time获取当前日期和时间的使用方法总结如下: 1.使用datetime 1.1 获 ...

  6. java android 获取当前时间_Android获取当前系统日期和时间

    详细内容 本文用三种方法实现了在安卓上的时间获取功能,喜欢的小伙伴收藏一下,去试试吧! 第一种方法SimpleDateFormat simpleDateFormat = new SimpleDateF ...

  7. python获取当前日期_python获取当前的日期和时间

    原博文 2020-01-14 10:27 − import datetime import time print ("格式参数:") print (" %a 星期几的简写 ...

  8. android/IOS NTP 获取在线的GMT 网络时间

    不通过读取手机时间,读取服务器时间,通过NTP协议进行获取时间 ios: http://blog.csdn.net/wzq9706/article/details/9497615 android :h ...

  9. 在perl中获取当前的日期和时间

    my ($sec,$min,$hour,$day,$mon,$year,$weekday,$yeardate,$savinglightday)   =  (localtime(time)); $sec ...

最新文章

  1. php判断数组是否存在字符串中,php判断数组元素中是否存在某个字符串的方法_php技巧...
  2. JMeter的PUT请求,响应结果中文出现乱码的解决方法
  3. “不翻身,就要翻船”!帆软独家:制造业数字化转型解决方案
  4. 准程序员必看!该怎么规划自己的职业人生,看看前辈们给的建议!
  5. SQL必知必会-检索数据
  6. 矩阵平均路径长度_Android自定义View-路径动画
  7. 浅谈软件测试人员不要这样写测试用例(给测试新手和老鸟的提示)
  8. JAVA中String与StringBuffer 、StringBuilder的区别
  9. 博文视点大讲堂第44期——招聘真相全揭秘 圆满结束
  10. MacOS入门技巧分享
  11. 樊昌信 通信原理第七版 第八章思考题
  12. java 运维系统_Java 应用运维
  13. matlab读取图片value,matlab读取写入图像数据格式uint8,double
  14. [Github实战]双重认证2FA 如何 设置/更改[手把手][2022]
  15. android自动照相机2.0,Nano Camera
  16. Python 数据科学入门教程:Pandas
  17. 功放DIY电路制作完成
  18. 一个项目从立项到终结
  19. GB_T28181-2016.pdf
  20. 几款免费ssh客户端软件--替代xshell选型

热门文章

  1. 如何设计windows流量监测系统
  2. 有些公司,明天不上班!
  3. N103_考虑周末及法定上班和休假日计算工作日时长
  4. 客户端404The origin server did not find a current representation for the target resource or is not...
  5. 聊一聊我在 B站 上自学编程的经历吧!
  6. IT 运维中变更管理的意义和常见问题解答
  7. 各种电子图书馆文章(PDF、PDG、CAJ)转为Word文档的方法
  8. 微信JS接口- 企业号开发者接口文档
  9. IE8打不开网页提示sysfader错误的解决办法
  10. Linux中环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件