SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Java入門 (10) - さまざまな値とフォーマット

作って覚えるJavaプログラミングのススメ 第10回


和暦はどうやって使う?

 ここまでは、西暦を使って日時を扱ってきましたが、日本では「和暦」も多く用いられています。和暦というのは、「平成」「昭和」といった、元号による暦のことです。これは、利用できるのでしょうか。

 和暦は、Java 6から新たにサポートされるようになりました。が、和暦を利用するための新たなクラスなどは特に覚える必要はありません。今までのGregorianCalendarSimpleDateFormatによる日時の扱いそのままでいいのです。ただし、日時を扱う前に、ちょっとした下準備をしておく必要があります。

import java.util.Locale;

// ……(略)……

public static void main(String args[]) {
    Locale.setDefault(new Locale("ja","JP","JP"));
    GregorianCalendar cal = new GregorianCalendar();
        SimpleDateFormat format =
            new SimpleDateFormat("GGGG yy 年 M月 d日 (E曜日)");
    System.out.println(format.format(cal.getTime()));
}
実行すると、今日の日付を和暦で表示する。
実行すると、今日の日付を和暦で表示する。

 これは、今日の日付を和暦で表示するサンプルです。日時の扱いに関する部分は、今まで作成したサンプルそのままで、特に新しいことはありません。違っているのは、一番最初にあるこの文だけです。

Locale.setDefault(new Locale("ja","JP","JP"));

 これは、「ロケール情報」と呼ばれる地域情報に関する設定を行っているのです。Javaでは、現在のシステムがどの地域(ロケール)にあるかを内部で管理しています。普通に日時を扱うと、自動的に日本時間として日時が扱われるのも、内部でロケール情報が設定されているからなのです。

 このロケール情報は、setDefaultメソッドで変更することができます。ここでは、新たにnew Locale("ja","JP","JP")というLocaleインスタンスを設定しています。ここで作成したのが「和暦使用のための日本ロケール」を示すLocaleインスタンスなのです。これをロケールとして設定することで、自動的に和暦が使われるようになります。まぁ、このあたりは、ロケールとローカライズに関する理解がないと難しいかも知れません。よく分からなければ、とりあえず「この1行を最初に書いておけば和暦が使えるんだ」とだけ覚えておけばよいでしょう。

 西暦と和暦の違いは、フォーマットの際のパターン文字の扱いに現れます。和暦では、紀元を示すGが、元号として扱われるようになります。ここではGGGGと4桁のGが使われていますが、こうすると「平成」といった正しい元号が表示されます。3桁以下だと「H」というようにイニシャルによる省略された元号の指定になります。

 以上、日時の値の基本的な扱い方について、一通り説明をしました。GregorianCalendarSimpleDateFormatの基本さえ分かれば、決して難しいものではありません。基本的な値の操作がきちんとできるようになっておきましょう。

数値のフォーマット

 日時の扱いでは、「フォーマット」が非常に重要になりました。日付を扱うCalendarインスタンスだけがあっても、それをきちんと西暦や和暦で表現できないと役には立たないのですから。

 こうした「フォーマット」のための機能というのは、日時以外の値にもあります。例えば、数字。数字は、実際に表示される際には「10,000」というように3桁ごとにカンマで区切って表示するのが一般的です。こうした数値のフォーマットを行う場合には、java.textパッケージのNumberFormatというクラスを利用します。

 このNumberFormatは、newでインスタンスを作成しません。getInstanceというメソッドを呼び出してインスタンスを取得します。そして、SimpleDateFormatと同様に、formatメソッドを呼び出して数字をフォーマットしたStringを得ます。実際にやってみましょう。

import java.text.NumberFormat;

// ……(略)……

public static void main(String args[]) {
    int n = 1234567;
    NumberFormat format = NumberFormat.getInstance();
    System.out.println(format.format(n));
}
1234567を、3桁ごとにカンマをつけた形にフォーマットして表示する。
1234567を、3桁ごとにカンマをつけた形にフォーマットして表示する。

 たったこれだけです。nの値をいろいろと変更して試してみましょう。日付と違い、数値のフォーマットは、パターン文字などを使って表示形式を設定したりする必要がありません。日本では、数値は「3桁ごとにカンマ」と決まっていますから、わざわざ設定する必要がないのです。

 が、世の中には、別の形式でフォーマットする国も存在します。そうした場合にはどうすればよいのか? インスタンスを取得する際、「国のロケール情報」を指定してやればよいのです。

public static void main(String args[]) {
    int n = 1234567;
    NumberFormat format = NumberFormat.getInstance(Locale.GERMANY);
    System.out.println(format.format(n));
}
1234567を、ドイツのフォーマットで表示する。
1234567を、ドイツのフォーマットで表示する。

 例えば、これはドイツでのフォーマット形式で数字を表示させた例です。getInstanceのところでLocale.GERMANYと引数を与えていますね? これは、ドイツのロケール情報を示すLocaleです。これにより、ドイツでのフォーマットを扱うNumberFormatインスタンスが作成されます。まぁ、あまり外国の数値フォーマットを必要とする人は多くはないでしょうが、「Localeを指定すれば簡単にできる」ということは知っておくとよいでしょう。主な国のロケールは、Localeクラスにクラスフィールドとして用意されています。非常に数が多いのでここでは掲載しませんが、興味ある人は一度Java Platform API仕様などで確認されると良いでしょう。

次のページ
金額のフォーマット

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2795 2008/07/30 09:30

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー