Locale と TimeZone

国際化機能の最も基本となるクラス Lolcale と TimeZone について解説します。
Localeは言語もしくは国(地域)の違いを識別するためのクラスです。 アプリケーションは Localeの情報に基づいて、表示するメッセージや 日付の表現などの最適なものを選択することができます。
日本のように1つの国が1つの言語にほぼ対応している場合もあります。 (日本も厳密には違いますが、 アイヌ語を表示してくれるコンピュータは残念ながら存在しません。) 一方、 カナダやスイスのように1つの国の中で複数の主要言語が用いられたり、 逆に英語や中国語のように複数の国や地域で使用されている言語もあります。 したがって、国・地域による Localeの分類と言語による分類は常に1対1に 対応するとは限りません。 したがって Localeのオブジェクトの生成には、言語だけではなく国(地域)の 情報を指定することもできます。 言語名はアルファベットの小文字2文字 で、 国(地域)名はアルファベットの大文字2文字 で、 それぞれ指定します。その名称は ISOの規格によって定められています。
たとえば、アゼルバイジャン共和国のアラビア語のロケールのオブジェクトは、 次のようにして生成することができます。 (あなたのシステムがそのロケールに対応できているかどうかは、別の問題です。)

Local locale = new Locale( "ar", "AZ" );

言語のみ指定すれば十分な場合は、国(地域)の指定は省略(空の文字列 ""を指定) してかまいません。
JDK1.1.4では良く利用される下記の 21の Localeが staticなフィールドとして定義されています。 (この名称は ISOの名称とは直接は対応していません。) また、それぞれの Locale は Variant というさらに細かく分類された Locale情報を持ちます。 これらはマシンやベンダーの違い、文字コードの違いなどで区分されます。 (この区分は完全に便宜的なもので ISOの規格のようなものはありません。) たとえば Locale("ja","JP") は日本語のコードの違いによってさらに3つの Variant に別れることになります。 実際にシステムに実装されている LocaleはこのVariantの部分の情報まで含みます。 通常はデフォルトの Variantが使用されるので意識する必要はありませんが、 使用中の Localeのオブジェクトの Variant名は getDisplayVarilant()メソッドで 調べることができます。しかし全ての Variantの名称を系統的に調べる方法は 多分ないでしょう。

staticフィールドとして定義されているLocale
JAPANESE JAPAN KOREAN KOREA
CHINESE SIMPLIFIED_CHINESE TRADITIONAL_CHINESE CHINA
PRC TAIWAN FRENCH FRANCE
GERMANY GERMAN ITALIAN ITALY
ENGLISH UK US CANADA
CANADA_FRENCH      

TimeZone は地球上の経度の違いから生じる時差の調整を行うためのクラスです。 ただし、時差は経度だけではなく国の事情でいくつかのゾーンにまとめて管理されて います。 日本の場合は JST(Japan Standard Time)という単独のタイムゾーンです。 アメリカ合衆国のように広い国では複数のタイムゾーンが使用されています。
TimeZoneはシステムの実装に依存する abstractなクラスです。 このためコンストラクタではなく staticなメソッド getTimeZone()によって 取得します。 タイムゾーンの指定は "JST", "PST" のようなタイムゾーンの名称を Stringで 与えます。


TimeZone zone = TimeZone.getTimeZone( "JST" );

システムが対応可能なタイムゾーン名の一覧は、 次のようにして調べることが可能です。

ソースファイル