lunar-1.5.jar

公历农历转换包
https://mvnrepository.com/artifact/com.github.heqiao2010/lunar

<!-- https://mvnrepository.com/artifact/com.github.heqiao2010/lunar -->
<dependency>
<groupId>com.github.heqiao2010</groupId>
<artifactId>lunar</artifactId>
<version>1.5</version>
</dependency>
https://repo1.maven.org/maven2/com/github/heqiao2010/lunar/1.5/lunar-1.5.jar
/*** TestLanar.java* * * * @author ZengWenFeng* @email 117791303@QQ.com* @mobile 13805029595* @date 2023.10.25*/
package zwf;import java.util.Calendar;import com.github.heqiao2010.lunar.LunarCalendar;/*** 测试公历农历转换包* *
<!-- https://mvnrepository.com/artifact/com.github.heqiao2010/lunar -->
<dependency><groupId>com.github.heqiao2010</groupId><artifactId>lunar</artifactId><version>1.5</version>
</dependency>https://repo1.maven.org/maven2/com/github/heqiao2010/lunar/1.5/lunar-1.5.jar* * * @author ZengWenFeng* @email 117791303@QQ.com* @mobile 13805029595* @date 2023.10.25*/
public class SolarLunarTest
{/*** 构造函数* * @author ZengWenFeng* @email 117791303@QQ.com* @mobile 13805029595* @date 2023.10.25*/public SolarLunarTest(){}/*** 测试方法* * @author ZengWenFeng* @email 117791303@QQ.com* @mobile 13805029595* @date 2023.10.25*/public static void main(String[] args){Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int date = calendar.get(Calendar.DATE);int hour = calendar.get(Calendar.HOUR_OF_DAY);int minute = calendar.get(Calendar.MINUTE);int second = calendar.get(Calendar.SECOND);//System.out.println(year + "年" + month + "月" + date + "日" + hour + "时" + minute + "分" + second + "秒");// 公历转农历LunarCalendar lunar = LunarCalendar.solar2Lunar(calendar);System.out.println(lunar.getFullLunarName());System.out.println("----------------");// 农历转公历Calendar solar = LunarCalendar.lunar2Solar(2023, 9, 10, false);int year2 = solar.get(Calendar.YEAR);int month2 = solar.get(Calendar.MONTH);int date2 = solar.get(Calendar.DATE);int hour2 = solar.get(Calendar.HOUR_OF_DAY);int minute2 = solar.get(Calendar.MINUTE);int second2 = solar.get(Calendar.SECOND);//System.out.println(year2 + "年" + month2 + "月" + date2 + "日" + hour2 + "时" + minute2 + "分" + second2 + "秒");}}
源码不多:

package com.github.heqiao2010.lunar;import java.util.*;/*** 中国农历* Created by joel on 2019/3/31.** @author joel*/
public class LunarCalendar extends GregorianCalendar {/*** serialVersionUID*/private static final long serialVersionUID = 7241031233810655166L;// ------------------------ 农历相关成员变量 --------------------------------// 农历年,和公历可能不一样private int lunarYear;// 农历月(范围1-12和公历不一样)private int lunarMonth;// 农历日期private int dayOfLunarMonth;// 是否为闰月日期private boolean isLeapMonth = false;// 农历这年闰月,如果不闰月,默认为0private int leapMonth = 0;// ------------------------ 构造方法 --------------------------------public LunarCalendar() {super();computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}public LunarCalendar(TimeZone zone) {super(zone);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}public LunarCalendar(Locale aLocale) {super(aLocale);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}public LunarCalendar(TimeZone zone, Locale aLocale) {super(zone, aLocale);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}/*** 通过公历年、月、日构造* @param year 公历年* @param month 公历月* @param dayOfMonth 公历日*/public LunarCalendar(int year, int month, int dayOfMonth) {super(year, month, dayOfMonth);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}public LunarCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) {super(year, month, dayOfMonth, hourOfDay, minute);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}public LunarCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) {super(year, month, dayOfMonth, hourOfDay, minute, second);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}/*** 通过农历年、月、日构造** @param lunarYear 农历年* @param lunarMonth 农历月份,范围1-12* @param dayOfLunarMonth 农历日* @param isLeapMonth 是否闰月*/public LunarCalendar(int lunarYear, int lunarMonth, int dayOfLunarMonth, boolean isLeapMonth) {computeByLunarDate(lunarYear, lunarMonth, dayOfLunarMonth, isLeapMonth);}/*** 通过公历构造** @param calendar 公历日期*/public LunarCalendar(Calendar calendar) {super(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}// ------------------------ 静态方法 --------------------------------/*** 公历转农历** @param solar 公历日期* @return 农历日期*/public static LunarCalendar solar2Lunar(Calendar solar) {return new LunarCalendar(solar);}/*** 农历转公历** @param lunarYear 农历年* @param lunarMonth 农历月,从1开始* @param LunarDate 农历日* @param isLeapMonth 是否润月* @return 公历日期*/public static Calendar lunar2Solar(int lunarYear, int lunarMonth, int LunarDate, boolean isLeapMonth) {LunarCalendar ret = new LunarCalendar();ret.computeByLunarDate(lunarYear, lunarMonth, LunarDate, isLeapMonth);return ret;}// ------------------------ 成员方法 --------------------------------/*** 公历上的操作,加减均是公历上的“一年”,“一个月”* @param field {@link java.util.Calendar} YEAR/MONTH/DATE* @param amount 数量,可正可负*/@Overridepublic void add(int field, int amount) {super.add(field, amount);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}/*** 农历上的年月日,加减均是农历上的“一年”,“一个月”* @param field {@link java.util.Calendar} YEAR/MONTH/DATE* @param amount 数量,可正可负*/public void addByLunar(int field, int amount) {switch (field) {case Calendar.DATE:super.add(Calendar.DATE, amount);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));break;case Calendar.MONTH:addLunarMonths(amount);break;case Calendar.YEAR:// 增加一个农历年,保持月/日不变,清空闰月状态checkComputeLunarDate(lunarYear + amount, lunarMonth, dayOfLunarMonth, false);break;default:throw new IllegalArgumentException(String.format("unsupported field: %d", field));}}/*** 计算月份加减** @param amount 数量*/public void addLunarMonths(int amount) {int y = lunarYear;int m = -1;int index = LunarCodes.monthIndex(y, lunarMonth, isLeapMonth);boolean isLeapMonth = false;int sum = index + amount;if (amount > 0) {for (int _y = lunarYear; _y < LunarData.MAX_YEAR; _y++) {final short[] a = LunarCodes.monthCodes(_y);int lunarMonths = a.length - 1;sum -= lunarMonths;if (sum > 0) {y++;}if (sum <= 0) {if (sum == 0) m = lunarMonths;else m = lunarMonths + sum;isLeapMonth = a[0] > 0 && a[0] + 1 == m;if (isLeapMonth || a[0] > 0 && a[0] < m) {m--;}break;}}if (sum > 0) {throw new IllegalArgumentException(String.format("add of month out of range: %d", amount));}} else if (amount < 0) {if (sum > 0) {m = sum;} else if (sum == 0) {Map.Entry<Integer, Boolean> en = LunarCodes.month(--y, -1);m = en.getKey();isLeapMonth = en.getValue();} else {for (int i = lunarYear - 1; i > LunarData.MINI_YEAR; i--) {int lunarMonths = LunarCodes.monthCodes(i).length - 1;sum += lunarMonths;y--;if (sum >= 0) {Map.Entry<Integer, Boolean> en;if (sum == 0) {en = LunarCodes.month(--y, -1);} else {en = LunarCodes.month(y, sum + 1);}m = en.getKey();isLeapMonth = en.getValue();break;}}}if (sum < 0) {throw new IllegalArgumentException(String.format("add of month out of range: %d", amount));}}checkComputeLunarDate(y, m, dayOfLunarMonth, isLeapMonth);}/*** 校验 day of month 是否是合法的,如果越限则从30号减到29号** @param y lunar year* @param m lunar month* @param d lunar day of month* @param isLeap 闰月*/private void checkComputeLunarDate(int y, int m, int d, boolean isLeap) {int days = d;if (d > 29 && d > LunarUtils.lengthOfMonth(y, m, isLeap)) {days--;}computeByLunarDate(y, m, days, isLeap);}@Overridepublic void set(int field, int value) {super.set(field, value);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}@Overridepublic void roll(int field, int amount) {super.roll(field, amount);computeBySolarDate(get(Calendar.YEAR), get(Calendar.MONTH), get(Calendar.DATE));}@Overridepublic String toString() {if (this.lunarYear < LunarData.MINI_YEAR || this.lunarYear > LunarData.MAX_YEAR || this.lunarMonth < 1|| this.lunarMonth > 12 || this.dayOfLunarMonth < 1|| this.dayOfLunarMonth > 30) {return String.format("Wrong lunar date: %d %d %d", lunarYear, lunarMonth, dayOfLunarMonth);}return String.format("%s年%s%s月%s", LunarData.getYearName(this.lunarYear), this.isLeapMonth() ? "闰" : "",LunarData.getMonthName(this.lunarMonth), LunarData.getDayName(this.dayOfLunarMonth));}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof LunarCalendar)) return false;if (!super.equals(o)) return false;LunarCalendar that = (LunarCalendar) o;return lunarYear == that.lunarYear &&lunarMonth == that.lunarMonth &&dayOfLunarMonth == that.dayOfLunarMonth &&isLeapMonth == that.isLeapMonth &&leapMonth == that.leapMonth;}@Overridepublic int hashCode() {int result = super.hashCode();result = 31 * result + lunarYear;result = 31 * result + lunarMonth;result = 31 * result + dayOfLunarMonth;result = 31 * result + leapMonth;result = 31 * result + (isLeapMonth ? 1 : 0);return result;}@Overridepublic Object clone() {LunarCalendar other = (LunarCalendar) super.clone();other.lunarYear = getLunarYear();other.lunarMonth = getLunarMonth();other.dayOfLunarMonth = getDayOfLunarMonth();other.leapMonth = getLeapMonth();other.isLeapMonth = isLeapMonth();return other;}/*** 返回农历日期,不包含年份** @param showLeap 是否显示闰月的闰字* @return 农历日期*/public String getLunar(boolean showLeap) {if (this.lunarMonth < 1 || this.lunarMonth > 12 || this.dayOfLunarMonth < 1|| this.dayOfLunarMonth > 30) {throw new IllegalArgumentException(String.format("Wrong lunar dayOfLunarMonth: %d %d", lunarMonth, dayOfLunarMonth));}if (showLeap) {return String.format("%s%s月%s", this.isLeapMonth() ? "闰" : "", LunarData.getMonthName(this.lunarMonth),LunarData.getDayName(this.dayOfLunarMonth));} else {return String.format("%s月%s", LunarData.getMonthName(this.lunarMonth),LunarData.getDayName(this.dayOfLunarMonth));}}/*** 返回中国农历的全名** @return String*/public String getFullLunarName() {return String.format("%s %s %s", this, LunarData.getTraditionalYearName(this.lunarYear),LunarData.getAnimalYearName(this.lunarYear));}/*** 创建LunarInfo中某一年的一列公历日历编码<br>* 公历日历编码:年份+月份+天,用于查询某个公历日期在某个LunarInfo列的哪一个区间<br>** @param solarYear 年份* @return 公历日历编码*/private int[] builderSolarCodes(int solarYear) {if (solarYear < LunarData.MINI_YEAR || solarYear > LunarData.MAX_YEAR) {throw new IllegalArgumentException("Illegal solar year: " + solarYear);}int lunarIndex = solarYear - LunarData.MINI_YEAR;int[] solarCodes = new int[LunarData.LUNAR_INFO[lunarIndex].length];for (int i = 0; i < solarCodes.length; i++) {if (0 == i) { // 第一个数表示闰月,不用更改solarCodes[i] = LunarData.LUNAR_INFO[lunarIndex][i];} else if (1 == i) {if (LunarData.LUNAR_INFO[lunarIndex][1] > 999) {// 这年农历一月一日对应的公历实际是上一年的solarCodes[i] = (solarYear - 1) * 10000 + LunarData.LUNAR_INFO[lunarIndex][i];} else {solarCodes[i] = solarYear * 10000 + LunarData.LUNAR_INFO[lunarIndex][i];}} else {solarCodes[i] = solarYear * 10000 + LunarData.LUNAR_INFO[lunarIndex][i];}}return solarCodes;}/*** 通过给定的农历日期,计算公历日期** @param lunarYear 农历年* @param lunarMonth 农历月,从1开始* @param lunarDate 农历日期* @param isLeapMonth 是否为闰月*/private void computeByLunarDate(final int lunarYear, final int lunarMonth, final int lunarDate,final boolean isLeapMonth) {if (lunarYear < LunarData.MINI_YEAR || lunarYear > LunarData.MAX_YEAR) {throw new IllegalArgumentException(String.format("LunarYear must in (%d, %d)", LunarData.MINI_YEAR,LunarData.MAX_YEAR));}this.lunarYear = lunarYear;this.lunarMonth = lunarMonth;this.dayOfLunarMonth = lunarDate;this.isLeapMonth = isLeapMonth;short code = LunarCodes.lunarMonthCode(lunarYear, lunarMonth, isLeapMonth);// 对设置的day of month 进行检查if (lunarDate == 30) {long length = LunarCodes.lengthOfMonth(lunarYear, lunarMonth, code);if (length != 30) {throw new IllegalArgumentException(String.format("农历%d年%d月, 闰月=%s,月天数为%d < %d", lunarYear,lunarMonth, isLeapMonth, length, lunarDate));}}super.set(Calendar.YEAR, lunarYear + LunarCodes.codeYear(code));super.set(Calendar.MONTH, LunarCodes.codeMonth(code) - 1);super.set(Calendar.DATE, LunarCodes.codeDay(code));super.add(Calendar.DATE, lunarDate - 1);}/*** 通过给定公历日期,计算农历日期各个域值* <br>* 这个方法可能会被调用多次,后续看能否再做优化* </br>** @param solarYear 公历年* @param solarMonth 公历月,0-11* @param solarDate 公历日*/private void computeBySolarDate(final int solarYear, final int solarMonth, final int solarDate) {if (solarYear < LunarData.MINI_YEAR|| (solarYear == LunarData.MINI_YEAR && solarMonth < LunarData.MINI_MONTH)|| (solarYear == LunarData.MINI_YEAR && solarMonth == LunarData.MINI_MONTH && solarDate < LunarData.MINI_DATE)|| solarYear > LunarData.MAX_YEAR|| (solarYear == LunarData.MAX_YEAR && solarMonth > LunarData.MAX_MONTH)|| (solarYear == LunarData.MAX_YEAR && solarMonth == LunarData.MAX_MONTH && solarDate > LunarData.MAX_DATE)) {// 有些中间过程日期会超出可计算范围// throw new IllegalArgumentException("Illegal solar year: " + solarYear);return;}int solarCode = solarYear * 10000 + 100 * (1 + solarMonth) + solarDate; // 公历码leapMonth = LunarData.LUNAR_INFO[solarYear - LunarData.MINI_YEAR][0];int[] solarCodes = builderSolarCodes(solarYear);int newMonth = LunarUtils.binSearch(solarCodes, solarCode);if (-1 == newMonth) {throw new IllegalArgumentException("No lunarInfo found by solarCode: " + solarCode);}int xDate = Long.valueOf(LunarCodes.solarDateCodesDiff(solarCode, solarCodes[newMonth], Calendar.DATE)).intValue();if (0 == newMonth) {// 在上一年int preYear = solarYear - 1;leapMonth = LunarData.LUNAR_INFO[preYear - LunarData.MINI_YEAR][0];short[] preSolarCodes = LunarData.LUNAR_INFO[preYear - LunarData.MINI_YEAR];// 取上年农历12月1号公历日期码int nearSolarCode = preSolarCodes[preSolarCodes.length - 1]; // 上一年12月1号// 下一年公历1月表示为了13月,这里做翻译,并计算出日期码nearSolarCode = (nearSolarCode / 100 == 13 ? preYear + 1 : preYear) * 10000+ (nearSolarCode / 100 == 13 ? nearSolarCode - 1200 : nearSolarCode);if (nearSolarCode > solarCode) {// 此公历日期在上一年农历12月1号,之前,即在上年农历11月内newMonth = 11;// 取农历11月的公历码nearSolarCode = preYear * 10000 + preSolarCodes[preSolarCodes.length - 2];} else {// 此公历日期在上一年农历12月内newMonth = 12;}xDate = Long.valueOf(LunarCodes.solarDateCodesDiff(solarCode, nearSolarCode, Calendar.DATE)).intValue();if (xDate < 0) {throw new IllegalArgumentException("Wrong solarCode: " + solarCode);}this.dayOfLunarMonth = 1 + xDate;this.lunarYear = preYear;this.lunarMonth = newMonth;this.isLeapMonth = 0 != leapMonth && (leapMonth == newMonth);} else if (solarCodes.length == newMonth + 1 && xDate >= 30) {// 在下一年(公历12月只有30天)newMonth = 1; // 农历肯定是1月// 取下一年的公历日期码short[] nextSolarCodes = LunarData.LUNAR_INFO[solarYear + 1 - LunarData.MINI_YEAR];// 取下一年农历1月1号公历日期码int nearSolarCode = solarYear * 10000 + nextSolarCodes[1]; // 下一年农历1月1号公历日期码xDate = Long.valueOf(LunarCodes.solarDateCodesDiff(solarCode, nearSolarCode, Calendar.DATE)).intValue();if (xDate < 0) {throw new IllegalArgumentException("Wrong solarCode: " + solarCode);}this.dayOfLunarMonth = 1 + xDate;this.lunarYear = solarYear + 1; // 农历年到了下一年this.lunarMonth = newMonth;this.isLeapMonth = false; // 农历1月不可能为闰月} else {if (xDate < 0) {throw new IllegalArgumentException("Wrong solarCode: " + solarCode);}this.dayOfLunarMonth = 1 + xDate;this.lunarYear = solarYear;this.isLeapMonth = 0 != leapMonth && (leapMonth + 1 == newMonth);if (0 != leapMonth && leapMonth < newMonth) {this.lunarMonth = newMonth - 1;} else {this.lunarMonth = newMonth;}}}// ------------------------ getter and setter --------------------------------public int getLunarYear() {return lunarYear;}public int getLunarMonth() {return lunarMonth;}public int getDayOfLunarMonth() {return dayOfLunarMonth;}public int getLeapMonth() {return leapMonth;}public boolean isLeapMonth() {return isLeapMonth;}
}
package com.github.heqiao2010.lunar;import java.util.AbstractMap;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Map;import static com.github.heqiao2010.lunar.LunarData.LUNAR_INFO;/*** 农历/公历对照代码工具方法集合*/
public class LunarCodes {/*** 农历年的代码数组* @param year 农历年* @return 代码数组*/public static short[] monthCodes(int year) {return LUNAR_INFO[year - LunarData.MINI_YEAR];}/*** 从代码中获取年份,大于12时表示下一年* @param code 代码* @return 0/1 今年或者下一年*/public static int codeYear(int code) {return code / 100 > 12 ? 1 : 0;}/*** 从代码中获取农历月初一在公历中的月份* @param code 代码* @return 公历月份*/public static int codeMonth(int code) {int m = code / 100;if (m > 12) m -= 12;return m;}/*** 从代码中获取农历日在公历中的日 (day of month)* @param code 代码* @return 公历日*/public static int codeDay(int code) {return code % 100;}/*** 求一个农历月的天数* @param lunarYear 农历年* @param month 农历月* @param code 农历月有日期,Mdd 表示* @return 月的天数*/public static long lengthOfMonth(int lunarYear, int month, short code) {short md2;short[] starts = monthCodes(lunarYear);int y2 = lunarYear;if (month + 1 < starts.length && starts[month] == code) {md2 = starts[month + 1];} else if (month + 2 < starts.length && starts[month + 1] == code) {md2 = starts[month + 2];} else if (lunarYear - LunarData.MINI_YEAR + 1 < LUNAR_INFO.length) {md2 = monthCodes(lunarYear + 1)[1];y2 ++;} else {throw new IllegalArgumentException("lunar date out of range");}int y1 = lunarYear + codeYear(code);int m1 = codeMonth(code);int d1 = codeDay(code);y2 += codeYear(md2);int m2 = codeMonth(md2);int d2 = codeDay(md2);Calendar c1 = Calendar.getInstance();c1.set(y1, m1 - 1, d1);Calendar c2 = Calendar.getInstance();c2.set(y2, m2 - 1, d2);return LunarUtils.solarDiff(c2, c1, Calendar.DATE);}/*** 根据农历年和 LUNAR_INFO 中的下标来确定月份和闰月** @param year 农历年* @param index LUNAR_INFO 月份数组中的下标* @return 月, 闰月*/public static Map.Entry<Integer, Boolean> month(int year, int index) {short[] a = monthCodes(year);int i = index;if (index == -1) {i = a.length - 1;}boolean isLeap = a[0] > 0 && a[0] + 1 == i;int month = isLeap || a[0] > 0 && a[0] < i ? i - 1 : i;return new AbstractMap.SimpleImmutableEntry(month, isLeap);}/*** 计算月份 Mdd 代码在数组中的位置** @param year 农历年* @param month 农历月* @param isLeapMonth 闰月* @return 月所在的下标*/public static int monthIndex(int year, int month, boolean isLeapMonth) {short[] a = monthCodes(year);if (a[0] > 0 && a[0] < month || a[0] == month && isLeapMonth) {return month + 1;}return month;}/*** 判断两个整数所代表公历日期的差值<br>* 一年按365天计算,一个月按30天计算<br>** @param solarCode1 农历日期代码* @param solarCode2 农历日期代码* @param field 差值单位* @return 差值*/public static long solarDateCodesDiff(int solarCode1, int solarCode2, int field) {GregorianCalendar c1 = new GregorianCalendar(solarCode1 / 10000, solarCode1 % 10000 / 100 - 1,solarCode1 % 10000 % 100);GregorianCalendar c2 = new GregorianCalendar(solarCode2 / 10000, solarCode2 % 10000 / 100 - 1,solarCode2 % 10000 % 100);return LunarUtils.solarDiff(c1, c2, field);}/*** 农历月的代码* @param lunarYear 农历月* @param lunarMonth 农历月* @param isLeapMonth 闰月* @return 代码*/public static short lunarMonthCode(int lunarYear, int lunarMonth, boolean isLeapMonth) {short[] codes = monthCodes(lunarYear);int index = lunarMonth;if (codes[0] > 0 && codes[0] < lunarMonth || codes[0] == lunarMonth && isLeapMonth) {index++;}return codes[index];}
}
package com.github.heqiao2010.lunar;public class LunarData {/*** 支持的最小日期1850-02-12*/public final static int MINI_YEAR = 1850;public final static int MINI_MONTH = 1;public final static int MINI_DATE = 12;/*** 支持的最大日期2150-12-31*/public final static int MAX_YEAR = 2150;public final static int MAX_MONTH = 11;public final static int MAX_DATE = 31;/*** 10天干* '甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'*/static final char[] LunarGan = {'\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a','\u8f9b', '\u58ec', '\u7678'};/*** 12地支* '子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'*/static final char[] LunarZhi = {'\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348','\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'};/*** 12生肖* '鼠', '牛', '虎', '兔', '龍', '蛇', '馬', '羊', '猴', '雞', '犬', '豬'*/static final char[] LunarAnimalName = {'\u9f20', '\u725b', '\u864e', '\u5154', '\u9f8d', '\u86c7','\u99ac', '\u7f8a', '\u7334', '\u96de', '\u72ac', '\u8c6c'};/*** 农历年份名* '〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'*/static final char[] LunarYearName = {'\u3007', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94','\u516d', '\u4e03', '\u516b', '\u4e5d'};/*** 农历月份名* '正', '二', '三', '四', '五', '六', '七', '八', '九', '十', '冬', '腊'*/static final char[] LunarMonthName = {'\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d','\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'};/*** 农历日期名* "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九",* "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二",* "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"*/static final String[] LunarDayName = {"\u521d\u4e00", "\u521d\u4e8c", "\u521d\u4e09", "\u521d\u56db","\u521d\u4e94", "\u521d\u516d", "\u521d\u4e03", "\u521d\u516b", "\u521d\u4e5d", "\u521d\u5341","\u5341\u4e00", "\u5341\u4e8c", "\u5341\u4e09", "\u5341\u56db", "\u5341\u4e94", "\u5341\u516d","\u5341\u4e03", "\u5341\u516b", "\u5341\u4e5d", "\u4e8c\u5341", "\u5eff\u4e00", "\u5eff\u4e8c","\u5eff\u4e09", "\u5eff\u56db", "\u5eff\u4e94", "\u5eff\u516d", "\u5eff\u4e03", "\u5eff\u516b","\u5eff\u4e5d", "\u4e09\u5341"};/*** 农历信息.<br>* 每个数组的第一个数表示该年闰月月份,为0表示不闰月<br>* 数组中其他数表示该月初一对应的公历日期<br>*/final static short[][] LUNAR_INFO = {{0, 212, 314, 412, 512, 610, 709, 808, 906, 1005, 1104, 1204, 1302}, // 1850{8, 201, 303, 402, 501, 531, 629, 728, 827, 925, 1024, 1123, 1222, 1321}, // 1851{0, 220, 321, 331, 419, 519, 618, 717, 815, 914, 1013, 1112, 1211, 1309}, // 1852{0, 208, 310, 408, 508, 607, 706, 805, 903, 1003, 1101, 1201, 1230}, // 1853{7, 129, 227, 329, 427, 527, 625, 725, 824, 922, 1022, 1120, 1220, 1318}, // 1854{0, 217, 318, 416, 516, 614, 714, 813, 911, 1011, 1110, 1209, 1308}, // 1855{0, 206, 307, 405, 504, 603, 702, 801, 830, 929, 1029, 1128, 1227}, // 1856{5, 126, 224, 326, 424, 523, 622, 721, 820, 918, 1018, 1116, 1216, 1315}, // 1857{0, 214, 315, 414, 513, 611, 711, 809, 907, 1007, 1106, 1205, 1304}, // 1858{0, 203, 305, 403, 503, 601, 630, 730, 828, 926, 1026, 1124, 1224}, // 1859{3, 123, 222, 322, 421, 521, 619, 718, 817, 915, 1014, 1113, 1212, 1311}, // 1860{0, 210, 311, 410, 510, 608, 708, 806, 905, 1004, 1103, 1202, 1231}, // 1861{8, 130, 301, 330, 429, 528, 627, 727, 825, 924, 1023, 1122, 1221, 1319}, // 1862{0, 218, 319, 418, 518, 616, 716, 814, 913, 1013, 1111, 1211, 1309}, // 1863{0, 208, 308, 406, 506, 604, 704, 802, 901, 1001, 1030, 1129, 1229, 1327}, // 1864{6, 127, 226, 327, 425, 525, 623, 723, 821, 920, 1020, 1118, 1218, 1317}, // 1865{0, 215, 317, 415, 514, 613, 712, 810, 909, 1009, 1107, 1207, 1306}, // 1866{0, 205, 306, 405, 504, 602, 702, 731, 829, 928, 1027, 1126, 1226}, // 1867{4, 125, 223, 324, 423, 522, 620, 720, 818, 916, 1016, 1114, 1214, 1313}, // 1868{0, 211, 313, 412, 512, 610, 709, 808, 906, 1005, 1104, 1203, 1302}, // 1869{10, 131, 302, 401, 501, 530, 629, 728, 827, 925, 1024, 1123, 1222, 1321}, // 1870{0, 219, 321, 420, 519, 618, 718, 816, 915, 1014, 1113, 1212, 1310}, // 1871{0, 209, 309, 408, 507, 606, 706, 804, 903, 1002, 1101, 1201, 1230}, // 1872{6, 129, 227, 328, 427, 526, 625, 724, 823, 922, 1021, 1120, 1220, 1318}, // 1873{0, 217, 318, 416, 516, 614, 714, 812, 911, 1010, 1109, 1209, 1308}, // 1874{0, 206, 308, 406, 505, 604, 703, 801, 831, 929, 1029, 1128, 1228}, // 1875{5, 126, 225, 326, 424, 523, 622, 721, 819, 918, 1017, 1116, 1216, 1314}, // 1876{0, 213, 315, 414, 513, 611, 711, 809, 907, 1007, 1105, 1205, 1303}, // 1877{0, 202, 304, 403, 502, 601, 630, 730, 828, 926, 1026, 1124, 1224}, // 1878{3, 122, 221, 323, 421, 521, 620, 719, 818, 916, 1015, 1114, 1213, 1312}, // 1879{0, 210, 311, 409, 509, 608, 707, 806, 905, 1004, 1103, 1202, 1231}, // 1880{7, 130, 228, 330, 428, 528, 626, 726, 825, 923, 1023, 1122, 1221, 1320}, // 1881{0, 218, 319, 418, 517, 616, 715, 814, 912, 1012, 1111, 1210, 1309}, // 1882{0, 208, 309, 407, 507, 605, 704, 803, 901, 1001, 1031, 1130, 1229}, // 1883{5, 128, 227, 327, 425, 525, 623, 722, 821, 919, 1019, 1118, 1217, 1316}, // 1884{0, 215, 317, 415, 514, 613, 712, 810, 909, 1008, 1107, 1206, 1305}, // 1885{0, 204, 306, 404, 504, 602, 702, 731, 829, 928, 1027, 1126, 1225}, // 1886{4, 124, 223, 325, 423, 523, 621, 721, 819, 917, 1017, 1115, 1215, 1313}, // 1887{0, 212, 313, 411, 511, 610, 709, 808, 906, 1005, 1104, 1203, 1302}, // 1888{12, 131, 302, 331, 430, 530, 628, 728, 826, 925, 1024, 1123, 1222, 1321}, // 1889{0, 219, 321, 419, 519, 617, 717, 816, 914, 1014, 1112, 1212, 1310}, // 1890{0, 209, 310, 409, 508, 607, 706, 805, 903, 1003, 1102, 1201, 1231}, // 1891{6, 130, 228, 328, 427, 526, 624, 724, 822, 921, 1021, 1119, 1219, 1318}, // 1892{0, 217, 318, 416, 516, 614, 713, 812, 910, 1010, 1108, 1208, 1307}, // 1893{0, 206, 307, 406, 505, 604, 703, 801, 831, 929, 1029, 1127, 1227}, // 1894{5, 126, 225, 326, 425, 524, 623, 722, 820, 919, 1018, 1117, 1216, 1315}, // 1895{0, 214, 314, 413, 513, 611, 711, 809, 907, 1007, 1105, 1205, 1303}, // 1896{0, 202, 303, 402, 502, 531, 630, 730, 828, 926, 1026, 1124, 1224}, // 1897{3, 122, 221, 322, 421, 520, 619, 719, 817, 916, 1015, 1114, 1213, 1312}, // 1898{0, 210, 312, 410, 510, 608, 708, 806, 905, 1005, 1103, 1203, 1301}, // 1899{8, 131, 301, 331, 429, 528, 627, 726, 825, 924, 1023, 1122, 1222, 1320}, // 1900{0, 219, 320, 419, 518, 616, 716, 814, 913, 1012, 1111, 1211, 1310}, // 1901{0, 208, 310, 408, 508, 606, 705, 804, 902, 1002, 1031, 1130, 1230}, // 1902{5, 129, 227, 329, 427, 527, 625, 724, 823, 921, 1020, 1119, 1219, 1317}, // 1903{0, 216, 317, 416, 515, 614, 713, 811, 910, 1009, 1107, 1207, 1306}, // 1904{0, 204, 306, 405, 504, 603, 703, 801, 830, 929, 1028, 1127, 1226}, // 1905{4, 125, 223, 325, 424, 523, 622, 721, 820, 918, 1018, 1116, 1216, 1314}, // 1906{0, 213, 314, 413, 512, 611, 710, 809, 908, 1007, 1106, 1205, 1304}, // 1907{0, 202, 303, 401, 430, 530, 629, 728, 827, 925, 1025, 1124, 1223}, // 1908{2, 122, 220, 322, 420, 519, 618, 717, 816, 914, 1014, 1113, 1213, 1311}, // 1909{0, 210, 311, 410, 509, 607, 707, 805, 904, 1003, 1102, 1202, 1301}, // 1910{6, 130, 301, 330, 429, 528, 626, 726, 824, 922, 1022, 1121, 1220, 1319}, // 1911{0, 218, 319, 417, 517, 615, 714, 813, 911, 1010, 1109, 1209, 1307}, // 1912{0, 206, 308, 407, 506, 605, 704, 802, 901, 930, 1029, 1128, 1227}, // 1913{5, 126, 225, 327, 425, 525, 623, 723, 821, 920, 1019, 1117, 1217, 1315}, // 1914{0, 214, 316, 414, 514, 613, 712, 811, 909, 1009, 1107, 1207, 1305}, // 1915{0, 203, 304, 403, 502, 601, 630, 730, 829, 927, 1027, 1125, 1225}, // 1916{2, 123, 222, 323, 421, 521, 619, 719, 818, 916, 1016, 1115, 1214, 1313}, // 1917{0, 211, 313, 411, 510, 609, 708, 807, 905, 1005, 1104, 1203, 1302}, // 1918{7, 201, 302, 401, 430, 529, 628, 727, 825, 924, 1024, 1122, 1222, 1321}, // 1919{0, 220, 320, 419, 518, 616, 716, 814, 912, 1012, 1110, 1210, 1309}, // 1920{0, 208, 310, 408, 508, 606, 705, 804, 902, 1001, 1031, 1129, 1229}, // 1921{5, 128, 227, 328, 427, 527, 625, 724, 823, 921, 1020, 1119, 1218, 1317}, // 1922{0, 216, 317, 416, 516, 614, 714, 812, 911, 1010, 1108, 1208, 1306}, // 1923{0, 205, 305, 404, 504, 602, 702, 801, 830, 929, 1028, 1127, 1226}, // 1924{4, 124, 223, 324, 423, 522, 621, 721, 819, 918, 1018, 1116, 1216, 1314}, // 1925{0, 213, 314, 412, 512, 610, 710, 808, 907, 1007, 1105, 1205, 1304}, // 1926{0, 202, 304, 402, 501, 531, 629, 729, 827, 926, 1025, 1124, 1224}, // 1927{2, 123, 221, 322, 420, 519, 618, 717, 815, 914, 1013, 1112, 1212, 1311}, // 1928{0, 210, 311, 410, 509, 607, 707, 805, 903, 1003, 1101, 1201, 1231}, // 1929{6, 130, 228, 330, 429, 528, 626, 726, 824, 922, 1022, 1120, 1220, 1319}, // 1930{0, 217, 319, 418, 517, 616, 715, 814, 912, 1011, 1110, 1209, 1308}, // 1931{0, 206, 307, 406, 506, 604, 704, 802, 901, 930, 1029, 1128, 1227}, // 1932{5, 126, 224, 326, 425, 524, 623, 723, 821, 920, 1019, 1118, 1217, 1315}, // 1933{0, 214, 315, 414, 513, 612, 712, 810, 909, 1008, 1107, 1207, 1305}, // 1934{0, 204, 305, 403, 503, 601, 701, 730, 829, 928, 1027, 1126, 1226}, // 1935{3, 124, 223, 323, 421, 521, 619, 718, 817, 916, 1015, 1114, 1214, 1313}, // 1936{0, 211, 313, 411, 510, 609, 708, 806, 905, 1004, 1103, 1203, 1302}, // 1937{7, 131, 302, 401, 430, 529, 628, 727, 825, 924, 1023, 1122, 1222, 1320}, // 1938{0, 219, 321, 420, 519, 617, 717, 815, 913, 1013, 1111, 1211, 1309}, // 1939{0, 208, 309, 408, 507, 606, 705, 804, 902, 1001, 1031, 1129, 1229}, // 1940{6, 127, 226, 328, 426, 526, 625, 724, 823, 921, 1020, 1119, 1218, 1317}, // 1941{0, 215, 317, 415, 515, 614, 713, 812, 910, 1010, 1108, 1208, 1306}, // 1942{0, 205, 306, 405, 504, 603, 702, 801, 831, 929, 1029, 1127, 1227}, // 1943{4, 125, 224, 324, 423, 522, 621, 720, 819, 917, 1017, 1116, 1215, 1314}, // 1944{0, 213, 314, 412, 512, 610, 709, 808, 906, 1006, 1105, 1205, 1303}, // 1945{0, 202, 304, 402, 501, 531, 629, 728, 827, 925, 1025, 1124, 1223}, // 1946{2, 122, 221, 323, 421, 520, 619, 718, 816, 915, 1014, 1113, 1212, 1311}, // 1947{0, 210, 311, 409, 509, 607, 707, 805, 903, 1003, 1101, 1201, 1230}, // 1948{7, 129, 228, 329, 428, 528, 626, 726, 824, 922, 1022, 1120, 1220, 1318}, // 1949{0, 217, 318, 417, 517, 615, 715, 814, 912, 1011, 1110, 1209, 1308}, // 1950{0, 206, 308, 406, 506, 605, 704, 803, 901, 1001, 1030, 1129, 1228}, // 1951{5, 127, 225, 326, 424, 524, 622, 722, 820, 919, 1019, 1117, 1217, 1315}, // 1952{0, 214, 315, 414, 513, 611, 711, 810, 908, 1008, 1107, 1206, 1305}, // 1953{0, 203, 305, 403, 503, 601, 630, 730, 828, 927, 1027, 1125, 1225}, // 1954{3, 124, 222, 324, 422, 522, 620, 719, 818, 916, 1016, 1114, 1214, 1313}, // 1955{0, 212, 312, 411, 510, 609, 708, 806, 905, 1004, 1103, 1202, 1301}, // 1956{8, 131, 302, 331, 430, 529, 628, 727, 825, 924, 1023, 1122, 1221, 1320}, // 1957{0, 218, 320, 419, 519, 617, 717, 815, 913, 1013, 1111, 1211, 1309}, // 1958{0, 208, 309, 408, 508, 606, 706, 804, 903, 1002, 1101, 1130, 1230}, // 1959{6, 128, 227, 327, 426, 525, 624, 724, 822, 921, 1020, 1119, 1218, 1317}, // 1960{0, 215, 317, 415, 515, 613, 713, 811, 910, 1010, 1108, 1208, 1306}, // 1961{0, 205, 306, 405, 504, 602, 702, 731, 830, 929, 1028, 1127, 1227}, // 1962{4, 125, 224, 325, 424, 523, 621, 721, 819, 918, 1017, 1116, 1216, 1315}, // 1963{0, 213, 314, 412, 512, 610, 709, 808, 906, 1006, 1104, 1204, 1303}, // 1964{0, 202, 303, 402, 501, 531, 629, 728, 827, 925, 1024, 1123, 1223}, // 1965{3, 121, 220, 322, 421, 520, 619, 718, 816, 915, 1014, 1112, 1212, 1311}, // 1966{0, 209, 311, 410, 509, 608, 708, 806, 904, 1004, 1102, 1202, 1231}, // 1967{7, 130, 228, 329, 427, 527, 626, 725, 824, 922, 1022, 1120, 1220, 1318}, // 1968{0, 217, 318, 417, 516, 615, 714, 813, 912, 1011, 1110, 1209, 1308}, // 1969{0, 206, 308, 406, 505, 604, 703, 802, 901, 930, 1030, 1129, 1228}, // 1970{5, 127, 225, 327, 425, 524, 623, 722, 821, 919, 1019, 1118, 1218, 1316}, // 1971{0, 215, 315, 414, 513, 611, 711, 809, 908, 1007, 1106, 1206, 1304}, // 1972{0, 203, 305, 403, 503, 601, 630, 730, 828, 926, 1026, 1125, 1224}, // 1973{4, 123, 222, 324, 422, 522, 620, 719, 818, 916, 1015, 1114, 1214, 1312}, // 1974{0, 211, 313, 412, 511, 610, 709, 807, 906, 1005, 1103, 1203, 1301}, // 1975{8, 131, 301, 331, 429, 529, 627, 727, 825, 924, 1023, 1121, 1221, 1319}, // 1976{0, 218, 320, 418, 518, 617, 716, 815, 913, 1013, 1111, 1211, 1309}, // 1977{0, 207, 309, 407, 507, 606, 705, 804, 903, 1002, 1101, 1130, 1230}, // 1978{6, 128, 227, 328, 426, 526, 624, 724, 823, 921, 1021, 1120, 1219, 1318}, // 1979{0, 216, 317, 415, 514, 613, 712, 811, 909, 1009, 1108, 1207, 1306}, // 1980{0, 205, 306, 405, 504, 602, 702, 731, 829, 928, 1028, 1126, 1226}, // 1981{4, 125, 224, 325, 424, 523, 621, 721, 819, 917, 1017, 1115, 1215, 1314}, // 1982{0, 213, 315, 413, 513, 611, 710, 809, 907, 1006, 1105, 1204, 1303}, // 1983{10, 202, 303, 401, 501, 531, 629, 728, 827, 925, 1024, 1123, 1222, 1321}, // 1984{0, 220, 321, 420, 520, 618, 718, 816, 915, 1014, 1112, 1212, 1310}, // 1985{0, 209, 310, 409, 509, 607, 707, 806, 904, 1004, 1102, 1202, 1231}, // 1986{6, 129, 228, 329, 428, 527, 626, 726, 824, 923, 1023, 1121, 1221, 1319}, // 1987{0, 217, 318, 416, 516, 614, 714, 812, 911, 1011, 1109, 1209, 1308}, // 1988{0, 206, 308, 406, 505, 604, 703, 802, 831, 930, 1029, 1128, 1228}, // 1989{5, 127, 225, 327, 425, 524, 623, 722, 820, 919, 1018, 1117, 1217, 1316}, // 1990{0, 215, 316, 415, 514, 612, 712, 810, 908, 1008, 1106, 1206, 1305}, // 1991{0, 204, 304, 403, 503, 601, 630, 730, 828, 926, 1026, 1124, 1224}, // 1992{3, 123, 221, 323, 422, 521, 620, 719, 818, 916, 1015, 1114, 1213, 1312}, // 1993{0, 210, 312, 411, 511, 609, 709, 807, 906, 1005, 1103, 1203, 1301}, // 1994{8, 131, 301, 331, 430, 529, 628, 727, 826, 925, 1024, 1122, 1222, 1320}, // 1995{0, 219, 319, 418, 517, 616, 716, 814, 913, 1012, 1111, 1211, 1309}, // 1996{0, 207, 309, 407, 507, 605, 705, 803, 902, 1002, 1031, 1130, 1230}, // 1997{5, 128, 227, 328, 426, 526, 624, 723, 822, 921, 1020, 1119, 1219, 1317}, // 1998{0, 216, 318, 416, 515, 614, 713, 811, 910, 1009, 1108, 1208, 1307}, // 1999{0, 205, 306, 405, 504, 602, 702, 731, 829, 928, 1027, 1126, 1226}, // 2000{4, 124, 223, 325, 423, 523, 621, 721, 819, 917, 1017, 1115, 1215, 1313}, // 2001{0, 212, 314, 413, 512, 611, 710, 809, 907, 1006, 1105, 1204, 1303}, // 2002{0, 201, 303, 402, 501, 531, 630, 729, 828, 926, 1025, 1124, 1223}, // 2003{2, 122, 220, 321, 419, 519, 618, 717, 816, 914, 1014, 1112, 1212, 1310}, // 2004{0, 209, 310, 409, 508, 607, 706, 805, 904, 1003, 1102, 1201, 1231}, // 2005{7, 129, 228, 329, 428, 527, 626, 725, 824, 922, 1022, 1121, 1220, 1319}, // 2006{0, 218, 319, 417, 517, 615, 714, 813, 911, 1011, 1110, 1210, 1308}, // 2007{0, 207, 308, 406, 505, 604, 703, 801, 831, 929, 1029, 1128, 1227}, // 2008{5, 126, 225, 327, 425, 524, 623, 722, 820, 919, 1018, 1117, 1216, 1315}, // 2009{0, 214, 316, 414, 514, 612, 712, 810, 908, 1008, 1106, 1206, 1304}, // 2010{0, 203, 305, 403, 503, 602, 701, 731, 829, 927, 1027, 1125, 1225}, // 2011{4, 123, 222, 322, 421, 521, 619, 719, 817, 916, 1015, 1114, 1213, 1312}, // 2012{0, 210, 312, 410, 510, 608, 708, 807, 905, 1005, 1103, 1203, 1301}, // 2013{9, 131, 301, 331, 429, 529, 627, 727, 825, 924, 1024, 1122, 1222, 1320}, // 2014{0, 219, 320, 419, 518, 616, 716, 814, 913, 1013, 1112, 1211, 1310}, // 2015{0, 208, 309, 407, 507, 605, 704, 803, 901, 1001, 1031, 1129, 1229}, // 2016{6, 128, 226, 328, 426, 526, 624, 723, 822, 920, 1020, 1118, 1218, 1317}, // 2017{0, 216, 317, 416, 515, 614, 713, 811, 910, 1009, 1108, 1207, 1306}, // 2018{0, 205, 307, 405, 505, 603, 703, 801, 830, 929, 1028, 1126, 1226}, // 2019{4, 125, 223, 324, 423, 523, 621, 721, 819, 917, 1017, 1115, 1215, 1313}, // 2020{0, 212, 313, 412, 512, 610, 710, 808, 907, 1006, 1105, 1204, 1303}, // 2021{0, 201, 303, 401, 501, 530, 629, 729, 827, 926, 1025, 1124, 1223}, // 2022{2, 122, 220, 322, 420, 519, 618, 718, 816, 915, 1015, 1113, 1213, 1311}, // 2023{0, 210, 310, 409, 508, 606, 706, 804, 903, 1003, 1101, 1201, 1231}, // 2024{6, 129, 228, 329, 428, 527, 625, 725, 823, 922, 1021, 1120, 1220, 1319}, // 2025{0, 217, 319, 417, 517, 615, 714, 813, 911, 1010, 1109, 1209, 1308}, // 2026{0, 206, 308, 407, 506, 605, 704, 802, 901, 930, 1029, 1128, 1228}, // 2027{5, 126, 225, 326, 425, 524, 623, 722, 820, 919, 1018, 1116, 1216, 1315}, // 2028{0, 213, 315, 414, 513, 612, 711, 810, 908, 1008, 1106, 1205, 1304}, // 2029{0, 203, 304, 403, 502, 601, 701, 730, 829, 927, 1027, 1125, 1225}, // 2030{3, 123, 221, 323, 422, 521, 620, 719, 818, 917, 1016, 1115, 1214, 1313}, // 2031{0, 211, 312, 410, 509, 608, 707, 806, 905, 1004, 1103, 1203, 1301}, // 2032{11, 131, 301, 331, 429, 528, 627, 726, 825, 923, 1023, 1122, 1222, 1320}, // 2033{0, 219, 320, 419, 518, 616, 716, 814, 913, 1012, 1111, 1211, 1309}, // 2034{0, 208, 310, 408, 508, 606, 705, 804, 902, 1001, 1031, 1130, 1229}, // 2035{6, 128, 227, 328, 426, 526, 624, 723, 822, 920, 1019, 1118, 1217, 1316}, // 2036{0, 215, 317, 416, 515, 614, 713, 811, 910, 1009, 1107, 1207, 1305}, // 2037{0, 204, 306, 405, 504, 603, 702, 801, 830, 929, 1028, 1126, 1226}, // 2038{5, 124, 223, 325, 423, 523, 622, 721, 820, 918, 1018, 1116, 1216, 1314}, // 2039{0, 212, 313, 411, 511, 610, 709, 808, 906, 1006, 1105, 1204, 1303}, // 2040{0, 201, 302, 401, 430, 530, 628, 728, 827, 925, 1025, 1124, 1223}, // 2041{2, 122, 220, 322, 420, 519, 618, 717, 816, 914, 1014, 1113, 1212, 1311}, // 2042{0, 210, 311, 410, 509, 607, 707, 805, 903, 1003, 1102, 1201, 1231}, // 2043{7, 130, 229, 329, 428, 527, 625, 725, 823, 921, 1021, 1119, 1219, 1318}, // 2044{0, 217, 319, 417, 517, 615, 714, 813, 911, 1010, 1109, 1208, 1307}, // 2045{0, 206, 308, 406, 506, 604, 704, 802, 901, 930, 1029, 1128, 1227}, // 2046{5, 126, 225, 326, 425, 525, 623, 723, 821, 920, 1019, 1117, 1217, 1315}, // 2047{0, 214, 314, 413, 513, 611, 711, 810, 908, 1008, 1106, 1205, 1304}, // 2048{0, 202, 304, 402, 502, 531, 630, 730, 828, 927, 1027, 1125, 1225}, // 2049{3, 123, 221, 323, 421, 521, 619, 719, 817, 916, 1016, 1114, 1214, 1313}, // 2050{0, 211, 313, 411, 510, 609, 708, 806, 905, 1005, 1103, 1203, 1302}, // 2051{8, 201, 301, 331, 429, 528, 627, 726, 824, 923, 1022, 1121, 1221, 1320}, // 2052{0, 219, 320, 419, 518, 616, 716, 814, 912, 1012, 1110, 1210, 1309}, // 2053{0, 208, 309, 408, 508, 606, 705, 804, 902, 1001, 1031, 1129, 1229}, // 2054{6, 128, 226, 328, 427, 526, 625, 724, 823, 921, 1020, 1119, 1218, 1317}, // 2055{0, 215, 316, 415, 515, 613, 713, 811, 910, 1009, 1107, 1207, 1305}, // 2056{0, 204, 305, 404, 504, 602, 702, 731, 830, 928, 1028, 1126, 1226}, // 2057{4, 124, 223, 324, 423, 522, 621, 720, 819, 918, 1017, 1116, 1216, 1314}, // 2058{0, 212, 314, 412, 512, 610, 710, 808, 907, 1006, 1105, 1205, 1304}, // 2059{0, 202, 303, 401, 430, 530, 628, 727, 826, 924, 1024, 1123, 1223}, // 2060{3, 121, 220, 322, 420, 519, 618, 717, 815, 914, 1013, 1112, 1212, 1311}, // 2061{0, 209, 311, 410, 509, 607, 707, 805, 903, 1003, 1101, 1201, 1231}, // 2062{7, 129, 228, 330, 428, 528, 626, 726, 824, 922, 1022, 1120, 1220, 1318}, // 2063{0, 217, 318, 417, 516, 615, 714, 813, 911, 1010, 1109, 1208, 1307}, // 2064{0, 205, 307, 406, 505, 604, 704, 802, 901, 930, 1029, 1128, 1227}, // 2065{5, 126, 224, 326, 424, 524, 623, 722, 821, 919, 1019, 1117, 1217, 1315}, // 2066{0, 214, 315, 414, 513, 612, 711, 810, 909, 1008, 1107, 1206, 1305}, // 2067{0, 203, 304, 402, 502, 531, 629, 729, 828, 926, 1026, 1125, 1224}, // 2068{4, 123, 221, 323, 421, 521, 619, 718, 817, 915, 1015, 1114, 1214, 1312}, // 2069{0, 211, 312, 411, 510, 609, 708, 806, 905, 1004, 1103, 1203, 1301}, // 2070{8, 131, 302, 331, 430, 529, 628, 727, 825, 924, 1023, 1122, 1221, 1320}, // 2071{0, 219, 320, 418, 518, 616, 716, 814, 912, 1012, 1110, 1210, 1308}, // 2072{0, 207, 309, 407, 507, 606, 705, 804, 902, 1001, 1031, 1129, 1229}, // 2073{6, 127, 226, 327, 426, 526, 624, 724, 822, 921, 1020, 1119, 1218, 1317}, // 2074{0, 215, 317, 415, 515, 613, 713, 812, 910, 1010, 1108, 1208, 1306}, // 2075{0, 205, 305, 404, 503, 602, 701, 731, 829, 928, 1028, 1126, 1226}, // 2076{4, 124, 223, 324, 423, 522, 620, 720, 818, 917, 1017, 1116, 1215, 1314}, // 2077{0, 212, 314, 412, 512, 610, 709, 808, 906, 1006, 1105, 1204, 1303}, // 2078{0, 202, 303, 402, 501, 531, 629, 728, 827, 925, 1025, 1123, 1223}, // 2079{3, 122, 221, 321, 420, 519, 618, 717, 815, 914, 1013, 1111, 1211, 1310}, // 2080{0, 209, 310, 409, 509, 607, 707, 805, 903, 1003, 1101, 1130, 1230}, // 2081{7, 129, 227, 329, 428, 528, 626, 725, 824, 922, 1022, 1120, 1219, 1318}, // 2082{0, 217, 318, 417, 517, 615, 715, 813, 912, 1011, 1110, 1209, 1308}, // 2083{0, 206, 307, 405, 505, 603, 703, 802, 831, 930, 1029, 1128, 1227}, // 2084{5, 126, 224, 326, 424, 523, 622, 722, 820, 919, 1019, 1117, 1217, 1315}, // 2085{0, 214, 315, 414, 513, 611, 711, 809, 908, 1008, 1106, 1206, 1305}, // 2086{0, 203, 305, 403, 503, 601, 630, 730, 828, 927, 1026, 1125, 1225}, // 2087{4, 124, 222, 323, 421, 521, 619, 718, 817, 915, 1014, 1113, 1213, 1312}, // 2088{0, 210, 312, 411, 510, 609, 708, 806, 904, 1004, 1102, 1202, 1301}, // 2089{8, 130, 301, 331, 430, 529, 628, 727, 825, 924, 1023, 1121, 1221, 1320}, // 2090{0, 218, 320, 419, 518, 617, 716, 815, 913, 1013, 1111, 1210, 1309}, // 2091{0, 207, 308, 407, 506, 605, 705, 803, 902, 1001, 1031, 1129, 1229}, // 2092{6, 127, 225, 327, 426, 525, 624, 723, 822, 921, 1020, 1119, 1218, 1317}, // 2093{0, 215, 316, 415, 514, 613, 712, 811, 910, 1009, 1108, 1208, 1306}, // 2094{0, 205, 306, 405, 504, 602, 702, 731, 830, 928, 1028, 1127, 1227}, // 2095{4, 125, 224, 324, 423, 522, 620, 720, 818, 916, 1016, 1115, 1215, 1313}, // 2096{0, 212, 314, 412, 512, 610, 709, 807, 906, 1005, 1104, 1204, 1302}, // 2097{0, 201, 303, 402, 501, 531, 629, 728, 826, 925, 1024, 1123, 1222}, // 2098{2, 121, 220, 322, 420, 520, 619, 718, 816, 915, 1014, 1112, 1212, 1310}, // 2099{0, 209, 311, 410, 509, 608, 707, 806, 904, 1004, 1102, 1201, 1231}, // 2010{7, 129, 228, 330, 428, 528, 626, 726, 825, 923, 1023, 1121, 1220, 1319}, //2101{0, 217, 319, 417, 517, 616, 715, 814, 912, 1012, 1111, 1210, 1309}, //2102{0, 207, 308, 407, 506, 605, 704, 803, 901, 1001, 1031, 1130, 1229}, //2103{5, 128, 226, 327, 425, 524, 623, 722, 821, 919, 1019, 1118, 1217, 1316}, //2104{0, 215, 316, 415, 514, 612, 712, 810, 908, 1008, 1107, 1206, 1305}, //2105{0, 204, 306, 404, 504, 602, 701, 731, 829, 927, 1027, 1125, 1225}, //2106{4, 124, 223, 325, 423, 523, 621, 720, 819, 917, 1016, 1115, 1214, 1313}, //2107{0, 212, 313, 411, 511, 609, 709, 807, 906, 1005, 1103, 1203, 1301}, //2108{9, 131, 302, 331, 430, 530, 628, 728, 826, 925, 1024, 1122, 1222, 1320}, //2109{0, 219, 320, 419, 519, 617, 717, 816, 914, 1014, 1112, 1211, 1310}, //2110{0, 208, 310, 408, 508, 606, 706, 805, 903, 1003, 1101, 1201, 1231}, //2111{6, 129, 227, 328, 426, 526, 624, 724, 822, 921, 1021, 1119, 1219, 1318}, //2112{0, 216, 318, 416, 515, 614, 713, 811, 910, 1010, 1108, 1208, 1307}, //2113{0, 206, 307, 406, 505, 603, 703, 801, 830, 929, 1028, 1127, 1227}, //2114{4, 126, 225, 326, 425, 524, 622, 722, 820, 918, 1018, 1116, 1216, 1315}, //2115{0, 214, 314, 413, 512, 611, 710, 809, 907, 1006, 1105, 1204, 1303}, //2116{0, 202, 303, 402, 502, 531, 630, 729, 828, 926, 1025, 1124, 1223}, //2117{3, 122, 220, 322, 421, 520, 619, 719, 817, 916, 1015, 1113, 1213, 1311}, //2118{0, 210, 311, 410, 509, 608, 708, 806, 905, 1004, 1103, 1202, 1301}, //2119{7, 130, 229, 329, 428, 527, 626, 725, 824, 923, 1022, 1121, 1220, 1319}, //2120{0, 217, 319, 417, 517, 615, 715, 813, 912, 1011, 1110, 1210, 1309}, //2121{0, 207, 308, 407, 506, 605, 704, 802, 901, 930, 1030, 1129, 1229}, //2122{5, 127, 226, 328, 426, 525, 624, 723, 821, 920, 1019, 1118, 1218, 1317}, //2123{0, 215, 316, 414, 514, 612, 712, 810, 908, 1008, 1106, 1206, 1305}, //2124{0, 203, 305, 404, 503, 602, 701, 731, 829, 927, 1027, 1125, 1225}, //2125{4, 123, 222, 324, 423, 522, 621, 720, 819, 917, 1016, 1115, 1214, 1313}, //2126{0, 211, 313, 412, 511, 610, 710, 808, 906, 1006, 1104, 1204, 1302}, //2127{11, 201, 301, 331, 429, 529, 628, 727, 826, 924, 1024, 1122, 1222, 1320}, //2128{0, 219, 320, 419, 518, 617, 716, 815, 914, 1013, 1112, 1211, 1310}, //2129{0, 208, 310, 408, 508, 606, 705, 804, 903, 1002, 1101, 1201, 1230}, //2130{6, 129, 227, 329, 427, 527, 625, 724, 823, 921, 1021, 1120, 1220, 1318}, //2131{0, 217, 317, 416, 515, 614, 713, 811, 910, 1009, 1108, 1208, 1306}, //2132{0, 205, 307, 405, 505, 603, 703, 801, 830, 928, 1028, 1127, 1226}, //2133{5, 125, 224, 326, 424, 524, 622, 722, 820, 918, 1018, 1116, 1216, 1314}, //2134{0, 213, 315, 413, 513, 612, 711, 809, 908, 1007, 1106, 1205, 1304}, //2135{0, 202, 303, 401, 501, 531, 629, 729, 827, 926, 1025, 1124, 1223}, //2136{2, 122, 220, 322, 420, 520, 618, 718, 817, 915, 1015, 1113, 1213, 1311}, //2137{0, 210, 311, 410, 509, 608, 707, 806, 904, 1004, 1103, 1202, 1301}, //2138{7, 130, 301, 330, 429, 528, 626, 726, 824, 923, 1023, 1122, 1221, 1320}, //2139{0, 218, 319, 417, 517, 615, 714, 813, 911, 1011, 1110, 1209, 1308}, //2140{0, 207, 308, 407, 506, 605, 704, 802, 901, 930, 1030, 1128, 1228}, //2141{5, 127, 226, 327, 426, 525, 624, 723, 821, 919, 1019, 1117, 1217, 1316}, //2142{0, 215, 316, 415, 515, 613, 713, 811, 909, 1008, 1107, 1206, 1305}, //2143{0, 204, 304, 403, 503, 602, 701, 730, 829, 927, 1027, 1125, 1224}, //2144{4, 123, 222, 323, 422, 522, 620, 720, 818, 917, 1016, 1115, 1214, 1313}, //2145{0, 211, 312, 411, 511, 609, 709, 807, 906, 1006, 1104, 1204, 1302}, //2146{0, 201, 302, 331, 430, 529, 628, 728, 826, 925, 1025, 1123, 1223}, //2147{1, 121, 220, 320, 419, 518, 616, 716, 814, 913, 1013, 1111, 1211, 1310}, //2148{0, 208, 310, 408, 508, 606, 705, 804, 902, 1002, 1031, 1130, 1230}, //2149{6, 129, 227, 329, 427, 527, 625, 724, 822, 921, 1020, 1119, 1219, 1318}, //2150};/*** 获取农历日的表示** @param lunarDay 农历日数值表示* @return 农历日传统字符表示*/public static String getDayName(int lunarDay) {return LunarDayName[lunarDay - 1];}/*** 获取农历月份** @param lunarMonth 农历月数值表示* @return 农历月传统字符表示*/public static char getMonthName(int lunarMonth) {return LunarMonthName[lunarMonth - 1];}/*** 获取农历年份** @param lunarYear 农历年数值表示* @return 农历年传统字符表示*/public static String getYearName(int lunarYear) {StringBuilder sb = new StringBuilder();sb.append(LunarYearName[lunarYear / 1000]);sb.append(LunarYearName[lunarYear % 1000 / 100]);sb.append(LunarYearName[lunarYear % 100 / 10]);sb.append(LunarYearName[lunarYear % 10]);return sb.toString();}/*** 返回传统天干地支年名称** @param y 农历年* @return 传统农历年份的表示*/public static String getTraditionalYearName(int y) {// 1804年是甲子年y = y - 1804;return ("" + LunarGan[y % 10] + LunarZhi[y % 12] + "年");}/*** 获取生肖名** @param y 农历年* @return 生肖名*/public static char getAnimalYearName(int y) {return LunarAnimalName[(y - 4) % 12];}
}
package com.github.heqiao2010.lunar;import java.util.Calendar;public class LunarUtils {/*** 计算两个农历日期之差** @param lc1 农历1* @param lc2 农历2* @param field 计算的维度,比如按月,天等* @return 具体的差值*/public static long luanrDiff(LunarCalendar lc1, LunarCalendar lc2, int field) {return solarDiff(lc1, lc2, field);}/*** 求两个公历日期之差,field可以为年月日,时分秒<br>* 一年按365天计算,一个月按30天计算<br>** @param solar1 历日期* @param solar2 历日期* @param field 差值单位* @return 差值*/public static long solarDiff(Calendar solar1, Calendar solar2, int field) {long t1 = solar1.getTimeInMillis();long t2 = solar2.getTimeInMillis();switch (field) {case Calendar.SECOND:return (long) Math.rint((t1 - t2) / 1000.0);case Calendar.MINUTE:return (long) Math.rint((t1 - t2) / 60000.0); // 60 * 1000case Calendar.HOUR:return (long) Math.rint((t1 - t2) / 3600000.0); //3600 * 1000case Calendar.DATE:return (long) Math.rint((t1 - t2) / 86400000.0); // 24 * 3600 * 1000case Calendar.MONTH:return (long) Math.rint((t1 - t2) / 2592000000.0); // 30 * 24 * 3600 * 1000case Calendar.YEAR:return (long) Math.rint((t1 - t2) / 31536000000.0); // 365 * 24 * 3600 * 1000default:return -1;}}/*** 农历月的天数** @param lunarYear 农历年* @param month 农历月* @param isLeapMonth 闰月* @return 天数,29或者30*/public static long lengthOfMonth(int lunarYear, int month, boolean isLeapMonth) {short[] codes = LunarCodes.monthCodes(lunarYear);int i = isLeapMonth ? month + 1 : month;if (codes[0] > 0 && month > codes[0]) i++;return LunarCodes.lengthOfMonth(lunarYear, month, codes[i]);}/*** 一个简单的二分查找,返回查找到的元素坐标,用于查找农历二维数组信息** @param array 数组* @param n 待查询数字* @return 查到的坐标*/public static int binSearch(int[] array, int n) {if (null == array || array.length == 0) {return -1;}int min = 0, max = array.length - 1;if (n <= array[min]) {return min;} else if (n >= array[max]) {return max;}while (max - min > 1) {int newIndex = (max + min) / 2; // 二分if (array[newIndex] > n) { // 取小区间max = newIndex;} else if (array[newIndex] < n) {// 取大区间min = newIndex;} else { // 相等,直接返回下标return newIndex;}}if (array[max] == n) {return max;} else if (array[min] == n) {return min;} else {return min; // 返回 较小的一个}}
}
相关文章:
lunar-1.5.jar
公历农历转换包 https://mvnrepository.com/artifact/com.github.heqiao2010/lunar <!-- https://mvnrepository.com/artifact/com.github.heqiao2010/lunar --> <dependency> <groupId>com.github.heqiao2010</groupId> <artifactId>l…...
c++编译使用log4cplus
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、log4cplus是什么?二、使用步骤1.下载源代码2.开始配置1.配置介绍2.开始编译 3.cmake引用4.示例 总结 前言 C很强大,但是仍然有很多…...
zookeeper源码(02)源码编译启动及idea导入
本文介绍一下zookeeper-3.9.0源码下载、编译及本地启动。 下载源码 git clone https://gitee.com/apache/zookeeper.gitcd zookeeper git checkout release-3.9.0 git checkout -b release-3.9.0源码编译 README_packaging.md文件 该文件介绍了编译zookeeper需要的环境和命…...
Github 2FA绑定中国+86手机号码实现两步验证
GitHub宣布,到 2023 年底,所有用户都必须要启用双因素身份验证 (2FA),不能只用密码. GitHub开启2FA后,除了输入密码外,还需要通过一次性密码(OTP)等方式做第二级身份验证,才能成功登…...
windows安装mysql-8.0.35
打开cmd(以管理员身份运行),切换到mysql下的bin目录 mysqld --initialize 执行完毕之后,在data目录下会生成很多文件。 打开cmd(以管理员身份运行),切换到mysql下的bin目录,如果刚才的cmd没有关闭,可以继续mysqld -…...
最详细STM32,cubeMX串口发送,接收数据
这篇文章将详细介绍 串口 发送数据,接受数据。 文章目录 前言一、串口的基础知识二、cubeMX 配置三、自动生成代码解析四、串口发送数据函数五、使用串口收发数据点亮 led重定向函数: 总结 前言 实验开发板:STM32F103C8T6。所需软件…...
Kafka入门04——原理分析
目录 01理解Topic和Partition Topic(主题) Partition(分区) 02理解消息分发 消息发送到分区 消费者订阅和消费指定分区 总结 03再均衡(rebalance) 再均衡的触发 分区分配策略 RangeAssignor(范围分区) RoundRobinAssignor(轮询分区) StickyAssignor(粘性分区) Re…...
k8s-----17、集群安全机制
1、集群安全机制概述 1.1 访问k8s的三个步骤 1、认证 2、鉴权(授权) 3、准入控制 进行访问的时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。且访问过程中需要证书、token、或者用户名密码。如果需要访问pod,…...
蓝桥算法赛(铺地板)
问题描述 小蓝家要装修了,小蓝爸爸买来了很多块(你可以理解为数量无限) 23 规格的地砖,小蓝家的地板是 nm 规格的,小蓝想问你,能否用这些 23 的地砖铺满地板。 铺满地板:对于地板的每个区域&…...
浅谈AcrelEMS-GYM文体建筑能效管理解决方案-安科瑞 蒋静
1 概述 AcrelEMS-CA 文体建筑能效管理聚焦建筑的能量和信息的流向搭建平台解决方案。该系统解决方案集变电站综合自动化、电力监控、电能质量分析及治理、电气安全、能耗分析、照明控制、设备运维于一体。打破子系统孤立,配置方便,运维便捷;…...
在LayerUI中使用onChange事件监听复选框的值变化
在LayerUI中,你可以使用onChange事件监听复选框的值变化。当复选框的状态发生变化时,onChange事件会被触发。 以下是一个示例代码,演示了如何使用onChange事件监听复选框的值变化: jsx import React from react; import { Chec…...
决策树--ID3算法
决策树–ID3算法 概念 (1)信息熵 E n t r o p y ( x ) − ∑ i N c l a s s P ( x i ) l o g 2 P ( x i ) Entropy(x) -\sum_{i}^{N_{class}}P(x_i)log_2 P(x_i) Entropy(x)−i∑NclassP(xi)log2P(xi) 假设只有2个类别(N2&…...
js延时加载有哪些方式
...
VSCode运行python提示No module name ‘xxx‘
在进行from * import *导入操作时,编辑器能够解析到module, 但是在编辑器中运行时确提示。 No module name xxx 而且单独运行该文件,或在其他编辑器、或terminal中python file运行,都能正常导入module. 解决方案: 在vscode的用…...
【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)
Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT 写在最前面背景介绍自动程序修复流程Process of APR (automated program repair)1、漏洞程序2、漏洞定位模块3、补丁生成4、补丁验证 (可以学习的PPT设计)经典的…...
C盘满了怎么清理文件?
电脑的C盘是我们电脑存储系统文件和应用程序的一个重要盘符,很多人经常会遇到C盘空间不足的问题;虽然我们可以通过卸载程序或者删除文件来释放空间,但是在这个过程中往往会误删掉一些重要的文件,造成部分程序可能无法正常使用。 因…...
pytest方法间变量值传递--request夹具
相当于self对象,因为调试的时候测试用例是类似沙箱的单步运行,所以self对象的属性被阻挡在沙箱外边。 request.cls 是pytest中的一个属性,它允许您在测试类中共享数据或属性。当您使用pytest编写测试类时,request 夹具允许您在测…...
Linux 内核定时器(高级字符设备五)
一、Linux 内核定时器介绍 在 Linux 内核中很多函数是基于定时器进行驱动的,但是内核定时器的精度并不高,所以不能作为高精度定时器使用。并且内核定时器的运行没有周期性,到达计时终点后会自动关闭。如果要实现周期性定时,就要在…...
「快学Docker」Docker镜像和容器的创建与管理
「快学Docker」Docker镜像和容器的创建与管理 引言什么是Docker镜像?镜像获取和使用镜像获取镜像使用 什么是Docker容器?Docker容器与主机之间的交互基于Dockerfile创建镜像基于镜像创建容器总结 引言 Docker镜像和容器是当今云计算领域中最受欢迎的技术…...
Zabbix出现 404Not FoundThe requested URL /zabbix was not found on this server.
目录 一、问题: 二、原因: 三、解决方法: 一、问题: Not Found The requested URL /zabbix was not found on this server. 二、原因: 未找到 在此服务器上找不到请求的 URL /zabbix。 /etc/httpd/conf.d 目录…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
