- PR -

java1.6での和暦対応について質問(JapaneseImperialCalendar)

1
投稿者投稿内容
mo
会議室デビュー日: 2006/06/20
投稿数: 7
投稿日時: 2008-01-21 13:38
こんにちわ。
java1.6のJapaneseImperialCalendarクラス(和暦用クラス)について質問です。

今後、平成が終了して新たな元号になった時の対応はどのようにとる形になるのでしょうか?
恐らく最終的には正式なJREのverUpにて対応することになると思われるのですが、改元直後に公開されるとはあまり思えません。
また、システムによっては容易にverUpが行えないことも多々あると思われます。

なお、jre/lib/calendar.propertiesに改元に関する設定があるようで、これに設定を加えることで対応はできるように見えるのですが、日本語名の設定が見当たりません。
どのように対応するのが良いのでしょうか?

--------------------------------------------------------
<calendars.properties元ファイル>
calendar.japanese.eras: \
name=Meiji,abbr=M,since=-3218832000000; \
name=Taisho,abbr=T,since=-1812153600000; \
name=Showa,abbr=S,since=-1357603200000; \
name=Heisei,abbr=H,since=600220800000

<元ファイルでの出力結果>
今日:平成20-1-21
10年前:平成10-1-21
--------------------------------------------------------

<calendars.properties変更後ファイル>
calendar.japanese.eras: \
name=Meiji,abbr=M,since=-3218832000000; \
name=Taisho,abbr=T,since=-1812153600000; \
name=Showa,abbr=S,since=-1357603200000; \
name=Heisei,abbr=H,since=600220800000; \
name=mirai,abbr=H,since=900220800000

<変更後ファイルでの出力結果>
今日:mirai11-1-21
10年前:平成10-1-21
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2008-01-21 19:03
日本語名は sun.text.resources.FormatData_ja という
ListResourceBundleのサブクラスで定義されているようです。

ListResourceBundleなのでクラス内部にハードコーディングです。
これに追加するのはちょっと無理っぽいですね

コード:
import java.util.*;

import sun.util.resources.LocaleData;

public class Test {
    public static void main(String[] args) {
        
        ResourceBundle rb = LocaleData.getDateFormatData(Locale.JAPANESE);
        System.out.println(rb.getClass().getName());
        System.out.println(ClassLoader.getSystemResource(rb.getClass().getName().replace('.','/')+".class"));

        String[] ss = rb.getStringArray("java.util.JapaneseImperialCalendar.Eras");
        System.out.println(Arrays.toString(ss));
    }
}

mo
会議室デビュー日: 2006/06/20
投稿数: 7
投稿日時: 2008-01-21 19:19
さっそくご返答ありがとうございます。
なるほど、ハードコーディングされてるのですね・・。

確かにそのようなコードがありました。
http://www.java2s.com/Open-Source/Java-Document/JDK-Modules-sun/text/sun/text/resources/FormatData_ja.java.htm
106行〜110行

これは運用中のシステムとかでは中々致命的な問題のような気もします。
和名の設定変更もできない限りはやはりDBや設定値で元号を持つほうがよろしいようですね。

早々に解決しまして助かりました。
ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)