使用Java8java.time.LocalDate,你能算出农历新年吗?
Using Java 8 java.time.LocalDate, can you compute Chinese New Year date?
使用Java 8 java.time.LocalDate
,你能计算出农历新年日期吗?
可能不会。
Oracle Documentation states that this function uses the Gregorian calendar system. Chinese New Year is based on the Chinese calendar and lunar calendar. (Source)
没有外部库当然不可能,因为标准 Java 不包含中国日历。农历新年的计算需要复杂的天文计算,标准Java也没有天文支持。
作为解决方法,使用我的库 Time4J (v4.35),然后编写以下代码:
LocalDate gregorian = LocalDate.now(ZoneId.of("Asia/Shanghai"));
ChineseCalendar cc = ChineseCalendar.ofNewYear(gregorian.getYear());
LocalDate newYearAsGregorian = cc.transform(PlainDate.axis()).toTemporalAccessor();
System.out.println(
newYearAsGregorian); // 2018-02-16
System.out.println(
"Year of the "
+ cc.get(ChineseCalendar.YEAR_OF_CYCLE).getZodiac(Locale.ENGLISH));
// Year of the Dog
有关详细信息,另请参阅 API。
使用Java 8 java.time.LocalDate
,你能计算出农历新年日期吗?
可能不会。
Oracle Documentation states that this function uses the Gregorian calendar system. Chinese New Year is based on the Chinese calendar and lunar calendar. (Source)
没有外部库当然不可能,因为标准 Java 不包含中国日历。农历新年的计算需要复杂的天文计算,标准Java也没有天文支持。
作为解决方法,使用我的库 Time4J (v4.35),然后编写以下代码:
LocalDate gregorian = LocalDate.now(ZoneId.of("Asia/Shanghai"));
ChineseCalendar cc = ChineseCalendar.ofNewYear(gregorian.getYear());
LocalDate newYearAsGregorian = cc.transform(PlainDate.axis()).toTemporalAccessor();
System.out.println(
newYearAsGregorian); // 2018-02-16
System.out.println(
"Year of the "
+ cc.get(ChineseCalendar.YEAR_OF_CYCLE).getZodiac(Locale.ENGLISH));
// Year of the Dog
有关详细信息,另请参阅 API。