日時の値とカレンダー (6/6)
作成:2012-07-22 19:49
更新:2012-07-22 19:49
更新:2012-07-22 19:49
■和暦の扱いについて
日時を利用するとき、大きな問題となるのが「和暦」です。和暦は日本独特の表現ですので、グレゴリオ暦の暦にはもちろんありません。では、どうやって和暦を表示すれば良いのでしょうか。
以前は、年数をもとに計算で和暦の年数を求めていました。例えば、平成は1989年1月8日からですから、日時がそれより後かどうかを調べ、後ならば年号から1988を引けば平成の年数が得られます。――しかし、これを昭和や大正、明治など元号ごとにしらべて計算するのはちょっと面倒臭いですね。
実をいえば、Javaには標準で元号による表記を行うための機能が備わっているのです。それは「Locale」と呼ばれるものを使用します。Localeは、地域(国や使用言語など)に関する情報を管理するためのクラスです。このLocaleインスタンスは以下のように作成をします。
作成したLocaleは、Locale.setDefaultというメソッドを使ってデフォルトに設定します。
下に簡単な利用例を掲載しておきました。今日の日付を元号で出力するものです。Localeを作成し、CalendarとSimpleDateFormatを作成してフォーマットしています。
注意したいのは、これらのインスタンスを作成する順番です。SimpleDateFormatを作成する前にsetDefaultしておかないと、元号表記にはなりません。DateFormatは、インスタンスを作成する際、デフォルト設定されているLocale情報を調べ、それに応じてインスタンスを生成します。したがって、インスタンスを作った後でsetDefaultしても、既に作成されたDateFormatインスタンスの出力を変えることはできないのです。
以前は、年数をもとに計算で和暦の年数を求めていました。例えば、平成は1989年1月8日からですから、日時がそれより後かどうかを調べ、後ならば年号から1988を引けば平成の年数が得られます。――しかし、これを昭和や大正、明治など元号ごとにしらべて計算するのはちょっと面倒臭いですね。
実をいえば、Javaには標準で元号による表記を行うための機能が備わっているのです。それは「Locale」と呼ばれるものを使用します。Localeは、地域(国や使用言語など)に関する情報を管理するためのクラスです。このLocaleインスタンスは以下のように作成をします。
Locale 変数 = new Locale( 言語記号, 国記号 );;日本のLocaleであれば、通常は、new Locale("ja","JP")というようにして作成をします。この時、第3の引数にも"JP"を指定し、new Locale("ja","JP","JP")という形でインスタンスを作成すると、年の値を元号による値として算出するようになります。
Locale 変数 = new Locale( 言語記号, 国記号, 他 )
作成したLocaleは、Locale.setDefaultというメソッドを使ってデフォルトに設定します。
Locale.setDefault(《Locale》);後は、普通にCalendarを作成し、SimpleDateFormatでフォーマットを指定するだけです。このとき、元号(平成など)は「G」記号で表示されます。GGだと「H」というようにイニシャルだけが表示され、GGGGとすると「平成」というように漢字表記になります。
下に簡単な利用例を掲載しておきました。今日の日付を元号で出力するものです。Localeを作成し、CalendarとSimpleDateFormatを作成してフォーマットしています。
注意したいのは、これらのインスタンスを作成する順番です。SimpleDateFormatを作成する前にsetDefaultしておかないと、元号表記にはなりません。DateFormatは、インスタンスを作成する際、デフォルト設定されているLocale情報を調べ、それに応じてインスタンスを生成します。したがって、インスタンスを作った後でsetDefaultしても、既に作成されたDateFormatインスタンスの出力を変えることはできないのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
public static void main(String[] args) { Locale locale = new Locale("ja","JP","JP"); Locale.setDefault(locale); Calendar cal1 = Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat("GGGGyyyy年 M月 d日(E)"); System.out.println(format.format(cal1.getTime())); }
※関連コンテンツ