2015-05-04 1 views
5

Использование Java 8java.time.LocalDate, вы можете вычислить дату китайский Новый год?Использование Java 8 java.time.LocalDate, можете ли вы вычислить дату китайского Нового года?

+0

См. Также [JDK-issue] (https://bugs.openjdk.java.net/browse/JDK-4609228). Чтобы установить ваши ожидания, я полагаю, что поддержка китайского лунного календаря никогда не будет в стандартной Java. –

+0

Если бы я смог ответить на ваш вопрос, не могли бы вы принять его? Благодаря! – camiblanch

ответ

1

Наверное, нет.

В Oracle Documentation указывается, что эта функция использует григорианскую систему календаря. Китайский Новый год основан на китайском календаре и лунном календаре. (Source)

0

Конечно, без внешней библиотеки невозможно, поскольку стандартная 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.