使用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