【问题标题】:Using Java 8 java.time.LocalDate, can you compute Chinese New Year date?使用 Java 8 java.time.LocalDate,你可以计算农历新年日期吗?
【发布时间】:2015-05-04 18:01:41
【问题描述】:

使用 Java 8 java.time.LocalDate,你能计算出农历新年日期吗?

【问题讨论】:

  • 另见JDK-issue。为了满足您的期望,我想标准 Java 永远不会支持中国农历。
  • 如果我能回答你的问题,你介意接受吗?谢谢!

标签: java calendar java-8 java-time


【解决方案1】:

可能不会。

Oracle Documentation 声明此函数使用公历系统。农历新年以农历和农历为基础。 (Source)

【讨论】:

    【解决方案2】:

    如果没有外部库当然不可能,因为标准 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

    【讨论】:

      猜你喜欢
      • 2022-06-16
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多