OracleのJDK6実装では、
Locale locale = new Locale("ja", "JP", "JP"); // ja_JP_JP
のロケールを利用することで和暦を扱うことができますが、AndroidではGregorianCalendar
が返却される、という実装の違いがあります。
これはAndroidにはJapaneseImperialCalendar
が存在しない、ということなんでしょうか?
UPDATE: Android N にてICU4J Android フレームワーク APIが提供されました。
android.icu.util.Calendar calendar = new android.icu.util.JapaneseCalendar();
android.icu.text.DateFormat df = new android.icu.text.SimpleDateFormat("Gy年M月d日", new android.icu.text.DateFormatSymbols(calendar, Locale.JAPANESE));
df.setCalendar(calendar);
Log.d("Calendar", df.format(new Date())); // 平成28年4月30日
Android標準で和暦を扱うことができるようになりました(ただし Android N 以降のみ)。
JapaneseCalendar
はあるのですよね。しかしgetInstance()
の実装ではGregorianCalendar
しか返さないので、SDKから取得することはできないということなんでしょうか。 – quesera2 Jan 08 '15 at 15:44JapaneseCalendar
はexternal/icu内部のC++クラスのようですね。一方のCalendar#getInstance(Locale)
実装はreturn new GregorianCalendar(locale);
1行ですから、SDKから直接JapaneseCalendar
にアクセスする術はなさそうです。(localeを渡しているので、これ以降を追えば何か分かるかも?) – yohjp Jan 09 '15 at 03:25prebuilts/misc/common/icu4j
にicu4j.jar
というJava向けのインターフェースも持ってはいるので、内部的に利用しているはずなのです。ただOpenJDKのCalendar#getInstance()
の実装と比較すると、和暦とタイ仏暦の扱いが端折られてるので、Calendar
として取得することは無理そうですね。 – quesera2 Jan 09 '15 at 13:40