北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

BuddhistCalendar

仏陀は偉大なのです。

例えば、ちょうど今、

Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR));

とやっても、タイでは「2006」が返って来ないかもしれません。試しに、ロケールをタイにした検証結果を載せてみます。

Calendar cal1 = Calendar.getInstance(Locale.JAPAN);
System.out.println("JAPAN: " + cal1.get(Calendar.YEAR));

Calendar cal2 = Calendar.getInstance(new Locale("th", "TH"));
System.out.println("THAI : " + cal2.get(Calendar.YEAR));

【結果】
JAPAN: 2006
THAI : 2549

種明かしは、Calendarのソースにあります。以下、JDKのソースの引用です。

    private static Calendar createCalendar(TimeZone zone,
                                           Locale aLocale)
    {
        if ("th".equals(aLocale.getLanguage())
            && ("TH".equals(aLocale.getCountry()))) {
        return new sun.util.BuddhistCalendar(zone, aLocale);
    }

    return new GregorianCalendar(zone, aLocale);	
}

自動的にsun.util.BuddhistCalendarが返って来てしまうわけです。タイのエンジニアは困らないんでしょうかねえ?