美文网首页
NSDate转换公历、农历

NSDate转换公历、农历

作者: Geniune | 来源:发表于2019-01-04 14:12 被阅读5次

    最近研究天干地支五行八卦,纯(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点
    农历:戊戌年冬月廿九日 未时
    

    如果本文对你有所帮助记得点个喜欢哈

    相关文章

      网友评论

          本文标题:NSDate转换公历、农历

          本文链接:https://www.haomeiwen.com/subject/ivbhrqtx.html