高分悬赏:编写一个程序,将当前的年月日转换成农历的年月日,其中年份要用天干地支表示
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))); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥100 关于使用MATLAB中copularnd函数的问题
- ¥20 在虚拟机的pycharm上
- ¥15 jupyterthemes 设置完毕后没有效果
- ¥15 matlab图像高斯低通滤波
- ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
- ¥15 钢筋实图交点识别,机器视觉代码
- ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
- ¥50 400g qsfp 光模块iphy方案
- ¥15 两块ADC0804用proteus仿真时,出现异常
- ¥15 关于风控系统,如何去选择