跳到主要內容

Java 實現民國年日期轉換

不知道大家現在還有沒有接到民國年轉換的需求
滿久以前偶爾會接到客戶寫信來問能不能做民國年的日期輸出或輸入
不過畢竟以前在處理上比較麻煩
最簡單的方式是請客戶分開資料欄位
分別產出民國跟西元年的資料,輸出時再依照需求組合出最終的字串
寫成常見Q&A之後就不大有需求信寄過來了

在沒有辦法分開欄位處理的情況下
有些部分就得自己用正規表示法切出數值,另外再撰寫轉換邏輯
在這個流程也得注意,如果是寫給通用性的功能得避免把 ISO 8061 的日期弄壞了
查閱 Java 8 的日曆規格時,注意到現在有提供民國年的曆法,處理如下

Chronology chrono = MinguoChronology.INSTANCE;
DateTimeFormatter df = new DateTimeFormatterBuilder().parseLenient()
        .appendPattern("yyy/MM/dd").toFormatter().withChronology(chrono)
        .withDecimalStyle(DecimalStyle.of(Locale.getDefault()));

ChronoLocalDate d1 = chrono.date(df.parse("108/08/06"));
ChronoLocalDate d2 = chrono.date(df.parse("98/08/06"));

LocalDate ld1 = LocalDate.from(d1);
LocalDate ld2 = LocalDate.from(d2);

System.out.println(ld1);               // 2019-08-06
System.out.println(ld2);               // 2009-08-06
System.out.println(ld1.format(df));    // 108/08/06


使用上簡單很多,簡化了以前必須要手動處理的部分
另外也比較好做程式的歸類,比較不容易在看到混在一團的各式日期處理

留言