Clone wiki

LunarUtil / Home

Java農曆公曆轉換

早前需要在Java上用到農曆公曆互相轉換,但在網上找了好些別人寫的library,要不就是只能做到公曆轉農曆,要不就是會計錯了農曆閏月部份。 最後找了幾個可用的library綜合一下並fix了一些閏月日子轉換錯誤之類的bug,去做到正確計算農曆公曆互相轉換。

Project pages

Project home

Bitbucket

Features

  1. 農曆轉公曆 支援輸入日期範圍 Min: 農曆一九零零(庚子)年一月初一 Max: 農曆二零九九(己未)年十二月三十日

  2. 公曆轉農曆 支援輸入日期範圍 Min: 1900年1月31日 Max: 2099年12月31日

Requirement

Java 8+

Examples:

  1. 農曆轉公曆
public static void main(String[] args) {
    // 農曆轉公曆
    System.out.println("---------------------");
    System.out.println("農曆轉公曆:");
    System.out.println("---------------------");
    {
        Solar solar = LunarUtil.lunar2Solar(1990, 5, 1, true).get();
        System.out.println("Example 1: 農曆1990年閏五月初一轉公曆");
        System.out.println(solar.toString());
        System.out.println("年: " + solar.getYear() + ", 月: " + solar.getMonth() + ", 日: " + solar.getDay());
        System.out.println();
    }
    {
        Solar solar = LunarUtil.lunar2Solar(2033, 11, 1, true).get();
        System.out.println("Example 2: 農曆2033年閏十一月初一轉公曆");
        System.out.println(solar.toString());
        System.out.println("年: " + solar.getYear() + ", 月: " + solar.getMonth() + ", 日: " + solar.getDay());
        System.out.println();
    }
}
  1. 公曆轉農曆
public static void main(String[] args) {
    // 公曆轉農曆
    System.out.println("---------------------");
    System.out.println("公曆轉農曆:");
    System.out.println("---------------------");
    {
        System.out.println("Example 1: 公曆1990年6月23日轉農曆");
        Lunar lunar = LunarUtil.solar2Lunar(1990, 6, 23).get();
        System.out.println(lunar.toString());
        System.out.println("年: " + lunar.getYear() + ", 月: " + lunar.getMonth() + ", 日: " + lunar.getDay() + ", 閏月: " + (lunar.isLeap() ? "是" : "否"));
        System.out.println();
    }
    {
        System.out.println("Example 2: 公曆2033年12月22日轉農曆");
        Lunar lunar = LunarUtil.solar2Lunar(2033, 12, 22).get();
        System.out.println(lunar.toString());
        System.out.println("年: " + lunar.getYear() + ", 月: " + lunar.getMonth() + ", 日: " + lunar.getDay() + ", 閏月: " + (lunar.isLeap() ? "是" : "否"));
        System.out.println("閏月: " + (lunar.isLeap() ? "是" : "否"));
        System.out.println();
    }
}

Dependency

  • Jodatime 2.x.x。

Contact

如有任何問題,歡迎email到 airic.yu@gmail.com

Updated