未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【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())と通貨用(getCurrencyInstance())があります。

また引数にロケールを指定すると、その国に対応した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メソッドを使用して、書式を設定します。



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加


あわせて学習したい

phoeducation.work phoeducation.work