zoukankan      html  css  js  c++  java
  • iOS 根据农历日期 获取当前的农历年份 即 干支纪年法算农历年

    前言:我国古代是用干支纪年的,近代史上提到的甲午战争、戊戌变法、辛亥革命等名词就是干支纪年。所谓干支就是十天干和十二地支的简称。天干、地支按照一定规则(单配单,双配双)可以搭配成60对,也就是一个甲子(60年),周而复始记录时间。(引用)

    元素:

    10天干:甲乙丙丁戊己庚辛壬癸
    
    12地支:子丑寅卯辰巳午未申酉戌亥

    基本计算原理:已知农历年份lunarYear

    天干计算法:农历年份减去3再除以10得到的余数对应的天干字就是干
    地支计算法:农历年份减去3再除以12得到的余数对应的地支字就是支

    基本举例:

    甲午战争发生于1894年,八国联军侵华的1900年应是:庚子年

    今天是公历2018年3月12日 农历年是2018年,对应干支纪年法中是 戊戌年

    。。。

    天干地支纪年算法:

    - (NSString *)ganzhiYear
    {
        //干指天干,共有10个符号
        NSArray *ganArray = @[@"甲",@"乙",@"丙",@"丁",@"戊",@"己",@"庚",@"辛",@"壬",@"癸"];
        //支指地支,共有12个符号:
        NSArray *zhiArray = @[@"子",@"丑",@"寅",@"卯",@"辰",@"巳",@"午",@"未",@"申",@"酉",@"戌",@"亥"];
        //天干计算法:年减去3再除以10得到的余数对应的天干字就是干
        //地支计算法:年减去3再除以12得到的余数对应的地支字就是支
        NSInteger ganIndex = (self.lunarYear - 3) % 10;
        NSInteger zhiIndex = (self.lunarYear - 3) % 12 ;
        ganIndex = (ganIndex == 0) ? 10 - 1 : ganIndex - 1;
        zhiIndex = (zhiIndex == 0) ? 12 - 1 : zhiIndex - 1;
        return [NSString stringWithFormat:@"%@%@年",ganArray[ganIndex],zhiArray[zhiIndex]];
    }

    项目地址

    农历算法类github地址点我

    参考:

    1. http://www.ht88.com/article/article_5190_1.html

    2. http://www.360doc.com/content/14/0122/14/802494_347109249.shtml

  • 相关阅读:
    深入理解 C/C++ sizeof() 运算符
    Luogu2040 | 打开所有的灯 (广搜+状压)
    Intel 8086 标志寄存器及JCC指令表
    Intel 8086 常用汇编指令表
    PTA L2-029 | 特立独行的幸福 (打表+递归)
    C++中为什么要用指针,而不直接使用对象?
    c#中基本类型占用字节数
    c++TXT文件读入
    较为初始的学生成绩管理系统
    C++中各种数据成员及成员函数的定义及使用
  • 原文地址:https://www.cnblogs.com/someonelikeyou/p/8549556.html
Copyright © 2011-2022 走看看