91名师指路-头部
91名师指路

java利用hutool工具类ChineseDate实现公历和农历的相互转换

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

一:引入pom

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.12</version>
</dependency>


二:方法摘要

方法  描述

 cn.hutool.core.date.ChineseDate.getChineseYear()

 获得农历年份

 cn.hutool.core.date.ChineseDate.getGregorianYear()

 获取公历的年

 cn.hutool.core.date.ChineseDate.getMonth()

 获取农历的月,从1开始计数

 cn.hutool.core.date.ChineseDate.getGregorianMonthBase1()

 获取公历的月,从1开始计数

 cn.hutool.core.date.ChineseDate.getGregorianMonth()

 获取公历的月,从0开始计数

 cn.hutool.core.date.ChineseDate.isLeapMonth()

 当前农历月份是否为闰月

 cn.hutool.core.date.ChineseDate.getChineseMonth()

 获得农历月份(中文,例如二月,十二月,或者润一月)

 cn.hutool.core.date.ChineseDate.getChineseMonthName()

 获得农历月称呼(中文,例如二月,腊月,或者润正月)

 cn.hutool.core.date.ChineseDate.getDay()

 获取农历的日,从1开始计数

 cn.hutool.core.date.ChineseDate.getGregorianDay()

 获取公历的日

 cn.hutool.core.date.ChineseDate.getChineseDay()

 获得农历日

 cn.hutool.core.date.ChineseDate.getGregorianDate()

 获取公历的Date

 cn.hutool.core.date.ChineseDate.getGregorianCalendar()

 获取公历的Calendar

 cn.hutool.core.date.ChineseDate.getFestivals()

 获得节日

 cn.hutool.core.date.ChineseDate.getChineseZodiac()

 获得年份生肖

 cn.hutool.core.date.ChineseDate.getCyclical()

 获得年的天干地支

 cn.hutool.core.date.ChineseDate.getCyclicalYMD()

 干支纪年信息

 cn.hutool.core.date.ChineseDate.getTerm()

 获得节气

 cn.hutool.core.date.ChineseDate.toStringNormal()

 转换为标准的日期格式来表示农历日期,例如2020-01-13

 cn.hutool.core.date.ChineseDate.toString()

 


三:代码如下

package com.fyq.utils;

import cn.hutool.core.date.ChineseDate;
import cn.hutool.core.date.DateUtil;

/**
* 功能:将日期转成阴历
* 网址:https://91mszl.com
* @Author: zxb
* @Date: 2022-04-22 19:05:04
*/
public class LunarUtils {

// 公历转农历
public static String solarToLunar(String date){
ChineseDate chineseDate=new ChineseDate(DateUtil.parseDate(date));
String lunar=chineseDate.toStringNormal();

System.out.println("获得农历年份: " + chineseDate.getChineseYear()); // 获得农历年份, 如: 2020
System.out.println("获取农历的月,从1开始计数: " + chineseDate.getMonth()); // 获取农历的月,从1开始计数
System.out.println("当前农历月份是否为闰月: " + chineseDate.isLeapMonth()); // 当前农历月份是否为闰月
System.out.println("获得农历月份(中文,例如二月,十二月,或者润一月): " + chineseDate.getChineseMonth()); // 获得农历月份(中文,例如二月,十二月,或者润一月)
System.out.println("获得农历月称呼(中文,例如二月,腊月,或者润正月): " + chineseDate.getChineseMonthName()); // 获得农历月称呼(中文,例如二月,腊月,或者润正月)

System.out.println("获取农历的日,从1开始计数: " + chineseDate.getDay()); // 获取农历的日,从1开始计数
System.out.println("获得农历日: " + chineseDate.getChineseDay()); // 获得农历日
System.out.println(chineseDate.toStringNormal()); // 转换为标准的日期格式来表示农历日期,例如2020-01-13

// -----------------------------------------------------------------------
System.out.println("获取节日: " + chineseDate.getFestivals()); // 获取节日
System.out.println("获得年份生肖: " + chineseDate.getChineseZodiac()); // 获得年份生肖
System.out.println("获得年的天干地支: " + chineseDate.getCyclical()); // 获得年的天干地支
System.out.println("干支纪年信息: " + chineseDate.getCyclicalYMD()); // 干支纪年信息
System.out.println("获得节气: " + chineseDate.getTerm()); // 获得节气
System.out.println("转换为标准的日期格式来表示农历日期: " + chineseDate.toStringNormal()); // 转换为标准的日期格式来表示农历日期,例如2020-01-13
System.out.println(chineseDate.toString());
return lunar;
}

// 农历转公历[isLeapMonth 表示是否闰月]
public static String lunarToSolar(int year, int month, int day, boolean isLeapMonth){
ChineseDate chineseDate=new ChineseDate(year, month, day, isLeapMonth);
String gregorian=chineseDate.getGregorianDate().toString();
System.out.println(gregorian);
System.out.println("获取公历的年份: " + chineseDate.getGregorianYear()); // 获取公历的年份
System.out.println("获取公历的月,从1开始计数: " + chineseDate.getGregorianMonthBase1()); // 获取公历的月,从1开始计数
System.out.println("获取公历的月,从0开始计数: " + chineseDate.getGregorianMonth()); // 获取公历的月,从0开始计数
System.out.println("获取公历的日: " + chineseDate.getGregorianDay()); // 获取公历的日
System.out.println("获取公历的Date: " + chineseDate.getGregorianDate()); // 获取公历的Date
System.out.println("获取公历的Calendar: " + chineseDate.getGregorianCalendar()); // 获取公历的Calendar
System.out.println("获取节日: " + chineseDate.getFestivals()); // 获取节日
System.out.println("获得年份生肖: " + chineseDate.getChineseZodiac()); // 获得年份生肖
System.out.println("获得年的天干地支: " + chineseDate.getCyclical()); // 获得年的天干地支
System.out.println("干支纪年信息: " + chineseDate.getCyclicalYMD()); // 干支纪年信息
System.out.println("获得节气: " + chineseDate.getTerm()); // 获得节气
System.out.println("转换为标准的日期格式来表示农历日期: " + chineseDate.toString()); // 转换为标准的日期格式来表示农历日期,例如2020-01-13
System.out.println(chineseDate.toString());

return gregorian;
}


public static void main(String[] args) {
// String solarDate=solarToLunar("2022-08-09");

String lunarDate=lunarToSolar(2023, 8, 23, false);
}


}



3.1)公历转农历执行结果
获得农历年份: 2022
获取农历的月,从1开始计数: 7
当前农历月份是否为闰月: false
获得农历月份(中文,例如二月,十二月,或者润一月): 七月
获得农历月称呼(中文,例如二月,腊月,或者润正月): 七月
获取农历的日,从1开始计数: 12
获得农历日: 十二
2022-07-12
获取节日:
获得年份生肖: 虎
获得年的天干地支: 壬寅
干支纪年信息: 壬寅年戊申月甲午日
获得节气:
转换为标准的日期格式来表示农历日期: 壬寅虎年 七月十二
壬寅虎年 七月十二
2022-07-12

3.2)农历转公历执行结果

获取公历的年份: 2023
获取公历的月,从1开始计数: 10
获取公历的月,从0开始计数: 9
获取公历的日: 7
获取公历的Date: 2023-10-07 00:00:00
获取公历的Calendar: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=9,WEEK_OF_YEAR=33,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=221,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=1,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=36,ZONE_OFFSET=28800000,DST_OFFSET=0]
获取节日:
获得年份生肖: 兔
获得年的天干地支: 癸卯
干支纪年信息: 癸卯年辛酉月戊戌日
获得节气:
转换为标准的日期格式来表示农历日期: 癸卯兔年 八月廿三
癸卯兔年 八月廿三
2023-10-07 00:00:00



参考资料:

https://blog.csdn.net/shi_hong_fei_hei/article/details/117431150



2022-08-09 14:00:30     阅读(1810)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部