dabocaiqq 2020-06-09 09:50 采纳率: 63.3%
浏览 160
已采纳

高分悬赏:编写一个程序,将当前的年月日转换成农历的年月日,其中年份要用天干地支表示

高分悬赏:编写一个程序,将当前的年月日转换成农历的年月日,其中年份要用天干地支表示

  • 写回答

1条回答 默认 最新

  • qybao 2020-06-09 16:24
    关注

    如果只是年份天干地支表示,单纯从天干10年一轮回,地支12年后一轮回来考虑的话,还是比较容易的
    如果要考虑闰月,立春等等因素的话,还是挺复杂的
    这里只是简单按轮回做了例子

    public class Sample {
        public static String[] tiangan = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};
        public static String[] dizhi = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
        public static String getChineseYear(int year) { //获取干支年,严格来说要考虑是否跨越立春(因为立春前还属于农历前一年,立春后才是农历新的一年)
            year = year - 4; //一般规律:以公元4年是甲子年为参照,天干10年一轮回,地支12年1轮回
            return String.format("%s%s年", tiangan[year%10], dizhi[year%12]); //todo计算立春
        }
        public static String getChineseMonth(int year, int month) { //获取干支月,算法比较复杂(要考虑是否立春,是否有闰月),期待别的答题者答复吧
            int lichun = 2; //立春在2月,一般来说立春在1月,否则要计算月偏差
            month -= (lichun-1); //一般规律:年干*2+月=月干,正月从寅算起
            return String.format("%s%s月", tiangan[(((year-3)%10)*2+month-1)%10], dizhi[((month+2)-1)%12]); //todo计算立春,闰月
        }
        public static String getChineseDay(int year, int month, int date) { //获取干支日
            Calendar c = Calendar.getInstance();
            c.set(year, month, date);
            int days = 0; //一般规律:网上有按百年基数来总结公式(谷歌百度)
            if (year < 2000) { //1900-1999年
                days = ((year%100)+3)*5+55+(year%100-1)/4;
            } else { //2000-2099年
                days = (year%100+7)*5+15+(year%100+19)/4;
            }
            days += c.get(Calendar.DAY_OF_YEAR);
            return String.format("%s%s日", tiangan[(days%60+9)%10], dizhi[(days%60+11)%12]);
        }
        public static void main(String[] args) {
            Calendar c = Calendar.getInstance();
            System.out.printf("今天是%s%s%s\n", getChineseYear(c.get(Calendar.YEAR)), getChineseMonth(c.get(Calendar.YEAR), c.get(Calendar.MONTH)+1),
                    getChineseDay(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE)));
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择