最近研究天干地支五行八卦,纯(bu)粹(wu)爱(zheng)好(ye),如有写的不对的地方欢迎大家指出
废话不多说,直接上代码
- (void)tranformDate:(NSDate *)date{
//公历数据:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
//年
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];
//月
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
//日
NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
//时
NSInteger hour = [calendar component:NSCalendarUnitHour fromDate:date];
//周
NSInteger week = [calendar component:NSCalendarUnitWeekday fromDate:date];
_label1.text = [NSString stringWithFormat:@"%zd年%zd月%zd日(星期%@) %zd点", year, month, day, [self getChineseWeek:week - 1], hour];
NSLog(@"公历:%zd年%zd月%zd日(星期%@) %zd点", year, month, day, [self getChineseWeek:week - 1], hour);
//农历数据:
NSCalendar *chinaCalendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
NSDateComponents*localeComp = [chinaCalendar components:unitFlags fromDate:date];
//年
NSInteger chinaYear = localeComp.year;
//月
NSInteger chinaMonth = localeComp.month;
//日
NSInteger chinaDay = localeComp.day;
//时
NSInteger chinaHour = localeComp.hour;
if(localeComp.hour == 23){//特殊处理:如果已超过晚11点,农历日应按第二天计算
date = [NSDate dateWithTimeInterval:1*60*60 sinceDate:date];//后一天
localeComp = [chinaCalendar components:unitFlags fromDate:date];
chinaYear = localeComp.year;
chinaMonth = localeComp.month;
chinaDay = localeComp.day;
chinaHour = 0;
year = [calendar component:NSCalendarUnitYear fromDate:date];
month = [calendar component:NSCalendarUnitMonth fromDate:date];
day = [calendar component:NSCalendarUnitDay fromDate:date];
hour = [calendar component:NSCalendarUnitHour fromDate:date];
}
NSString *chinaHourString = [self getChinaHour:chinaHour];
NSString *YearStems = [NSString stringWithFormat:@"%@%@", [self getStemsWithYear:chinaYear], [self getEarthlyBranchesWithYear:chinaYear]];
NSLog(@"农历:%@年%@月%@日 %@", YearStems, [self getChinaMonth:chinaMonth], [self getChinaDay:chinaDay], chinaHourString);
}
- (NSString *)getChineseWeek:(NSInteger)week{
NSArray *weekArray = @[@"日", @"一", @"二", @"三", @"四", @"五", @"六"];
return [weekArray objectAtIndex:week];
}
//农历年 转换 天干
- (NSString *)getStemsWithYear:(NSUInteger)year{
NSInteger heavenlyIndex = (year - 1) % 10;
return _arrStems[heavenlyIndex];
}
//农历年 转换 地支
- (NSString *)getEarthlyBranchesWithYear:(NSUInteger)year{
NSInteger earthIndex = year % _arrBranches.count - 1;
return _arrBranches[earthIndex];
}
//农历月
- (NSString *)getChinaMonth:(NSInteger)month{
NSArray *chineseMonths=[NSArray arrayWithObjects:@"正", @"二", @"三", @"四", @"五", @"六", @"七", @"八",@"九", @"十", @"冬", @"腊", nil];
return [chineseMonths objectAtIndex:month-1];
}
//农历日
- (NSString *)getChinaDay:(NSUInteger)day{
if(day < 0 || day > 30){
return @"";
}
NSArray *chineseDays=[NSArray arrayWithObjects:@"初一",@"初二",@"初三",@"初四",@"初五",@"初六",@"初七",@"初八",@"初九",@"初十",@"十一",@"十二",@"十三",@"十四",@"十五", @"十六",@"十七",@"十八",@"十九",@"二十",@"廿一",@"廿二",@"廿三",@"廿四",@"廿五",@"廿六",@"廿七",@"廿八",@"廿九",@"三十",nil];
return [chineseDays objectAtIndex:day-1];
}
使用NSDate对象调用tranformDate:方法即可
[self tranformDate:[NSDate date]];
输出:
公历:2019年1月4日(星期五) 14点
农历:戊戌年冬月廿九日 未时
如果本文对你有所帮助记得点个喜欢哈
网友评论