未来エンジニア養成所Blog

プログラミングを皆に楽しんでもらうための情報をお届けします。

【Java】ロケール

title


ロケール

ロケールとは、言語や国ごとに異なる単位、記号、日付、通貨の表し方の規則のことです。

例えば、日本語でプログラムを作成したときは、通貨記号は「円」、英語で作成したときは「$」のように、地域によって表示形式を変えることができます。

各国のロケールを使用する場合は、まずjava.util.Localeクラスのインスタンスを生成します。

コンストラクタの引数に、言語コードや国名を指定することで、各地域のロケールオブジェクトを生成することができます。

またgetDefaultメソッドを使用すると、実行中のJava環境のデフォルトのロケールを返すことができます。


これらのロケールオブジェクトからgetDisplayCountryメソッドやgetDisplayLanguageメソッドを使って、国名や言語を取り出すことができます。


【java.util.Localクラスのコンストラクタ】
Localクラスのコンストラクタ


【Localeクラスの主なメソッド】
Localeクラスの主なメソッド


【Localeクラスのコンストラクタに使用できる言語・国コード(一部抜粋)】
使用できる言語・国コード


【ロケールオブジェクトの取得】

import java.util.Locale;
public class LocaleSample1 {
    public static void main(String[] args) {
        Locale japan = Locale.getDefault();
        System.out.println("既定の国名は " + japan.getDisplayCountry());
        System.out.println("既定の言語は " + japan.getDisplayLanguage());

        Locale us = new Locale("en","US");
        System.out.println("変更後の国名は " + us.getDisplayCountry());
        System.out.println("変更後の言語は " + us.getDisplayLanguage());
    }
}


実行結果

既定の国名は日本
既定の言語は日本語
既定の国名はアメリカ合衆国
既定の言語は英語


4行目では、getDefaultメソッドで実行中のJava環境のデフォルトロケールを取り出します。

getDisplayCountry()とgetDisplayLanguage()で国名と言語を取り出しています。ここでは、国名は日本、言語は日本語と表示されます。


8行目では、newキーワードを使用して、Localeクラスのインスタンスを作成します。

その際、コンストラクタの引数に、言語コードに英語、国コードに米国を指定しておくことで、ロケールを米国の表示形式で扱うことができるようになります。


数値・通貨の書式設定

数値や通貨は国によって表現方法が異なります。

ここでは、国別の書式を設定する方法を見ていきましょう。


数値や通貨の書式設定を行う場合は、java.text.NumberFormatクラスを利用します。


数値や通貨の書式設定を行うには、次の2段階で行います。

  1. NumberFormatクラスのstaticメソッドを使用して、書式設定をするためのオブジェクトを生成する
  2. NumberFormatクラスのformatメソッドを使用して、書式を設定する


【NumberFormatクラスのオブジェクトを生成するためのstaticメソッド】
staticメソッド


上表の「フォーマット」とは書式と考えてよいでしょう。


それぞれに数値用(getInstance())と通貨用(getCurrencyInstande())があります。

また引数にロケールを指定すると、その国に対応したNumberFormatオブジェクトを返すことができます。


【数値や通貨をフォーマット(書式を設定する)format( )メソッド】
format( )メソッド


formatメソッドはオーバーロードされており、引数にdouble型とlong型をとるものが用意されています。


【数値・通貨の書式設定】

import java.text.NumberFormat;
import java.util.Locale;
class LocaleSample2{
    public static void main(String args[]){
        NumberFormat jpnum = NumberFormat.getInstance();
        NumberFormat jpcurrency = NumberFormat.getCurrencyInstance();
        System.out.println("日本の数値 " + jpnum.format(5000));
        System.out.println("日本の通貨 " + jpcurrency.format(5000));

        Locale us = new Locale("en","US");
        NumberFormat usnum = NumberFormat.getInstance(us);
        NumberFormat uscurrency = NumberFormat.getCurrencyInstance(us);
        System.out.println("米国の数値 " + usnum.format(5000));
        System.out.println("米国の通貨 " + uscurrency.format(5000));
    }
}


実行結果

日本の数値 5,000
日本の通貨 ¥5,000
米国の数値 5,000
米国の通貨 $5,000.00


5行目ではNumberFormatクラスのstaticメソッドgetInstance( )を使用して、デフォルトのロケールの対応した、数値用Numberformatオブジェクトを取得しています。

ここでデフォルトは日本語です。


また6行目で、getCurrencyInstance( )メソッドを使用して、デフォルトロケールに対応した、通貨用数値用Numberformatオブジェクトを取得しています。

7行目~8行目で、それぞれのオブジェクトに対してformatメソッドで書式を設定し、5000という数値に書式を設定すると、日本の数値 5,000、日本の通貨 ¥5,000と表示しています。


10行目では、Locale us = new Locale(“en”,“US”); で米国のロケールオブジェクトを作成します。

上記と同様に、数値用と通貨用のNumberformatオブジェクトを作成し、それぞれのオブジェクトに対してformatメソッドで書式を設定し、米国の数値 5,000、米国の通貨 $5,000.00と表示しています。


日付・時刻の書式設定

日付や時刻にも国によって表現方法が異なります。

ここでは、日付や時刻に国別の書式を設定する方法を見ていきましょう。

日付や時刻に国別の書式設定を行う場合は、java.text.DateFormatクラスを利用し、表現された日付や時刻をフォーマット(書式設定)します。

日付や時刻に国別の書式設定を行うには、次の2段階で行います。

  1. DateFormatクラスのstaticメソッドを使用して、書式設定をするためのオブジェクトを生成する
  2. DateFormatクラスのformatメソッドを使用して、書式を設定する


【DateFormatクラスのオブジェクトを生成するためのstaticメソッド】
staticメソッド


getDateInstance()は、第1引数に、フォーマットスタイルという日付や時刻の書式を指定します。

実際には下図のスタイルを定数で指定します。

第2引数には、国を表すロケールを指定します。


【日本語のフォーマットスタイル】
日本語のフォーマットスタイル


【DateFormatクラスの書式を設定するためのメソッド】
書式を設定するためのメソッド


DateFormatのオブジェクトを生成したら、そのオブジェクトにformatメソッドを使用して、書式を設定します。


【日付の書式設定】

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
class LocaleSample3{
    public static void main(String args[]){
        Locale loc_jp = new Locale("ja","JP");
        Locale loc_us = new Locale("en","US");

        DateFormat dfjp = DateFormat.getDateInstance(DateFormat.DEFAULT, loc_jp);
        DateFormat dfus = DateFormat.getDateInstance(DateFormat.DEFAULT, loc_us);

        Date today = new Date();

        System.out.println("日本語のデフォルトの日付書式 " + dfjp.format(today));
        System.out.println("米国のデフォルトの日付書式 " + dfus.format(today));
    }
}


実行結果

日本語のデフォルトの日付書式 2020/08/11
米国のデフォルトの日付書式 Aug 11, 2020


まず、6行目~7行目で、日本語用と米国用のLocaleオブジェクトを作成しておきます。

9行目~10行目では、getDateInstance( )の引数に、デフォルトのスタイルフォーマットとロケールを指定して、DateFormatオブジェクトを生成します。

12行目では、Dateクラスを使用して、本日の日付を取得します。

14行目~15行目でformatメソッドを使用し、本日の日付に書式を設定すると、日本と米国の日付の書式設定が行われます。


まとめ

  • ロケール

    • ロケールとは、言語や国ごとに異なる単位、記号、日付、通貨の表し方の規則のことです。
    • java.util.Localeクラスのインスタンスに、言語コードや国名を指定することで、各地域のロケールオブジェクトを生成することができます。
  • 数値・通貨の書式設定

    • java.text.NumberFormatクラスを利用します。
    • NumberFormatクラスのstaticメソッドを使用して、書式設定をするためのオブジェクトを生成します。
    • NumberFormatクラスのformatメソッドを使用して、書式を設定します。
  • 日付・時刻の書式設定

    • java.text.DateFormatクラスを利用します。
    • DateFormatクラスのstaticメソッドを使用して、書式設定をするためのオブジェクトを生成します。
    • DateFormatクラスのformatメソッドを使用して、書式を設定します。


参考図書



独学で挫折しそうになったら、オンラインプログラミングスクール
未来エンジニア養成所Logo



あわせて学習したい

phoeducation.work phoeducation.work