Java-i18n-quick-guide
Java内部化-概要
内面化
内部化またはI18Nは、複数の異なる言語のユーザーをサーバーに接続できるアプリケーションの機能を指します。 Javaには、内部化のサポートが組み込まれています。 Javaは、それに応じて数値の書式設定、通貨、日付と時刻の調整も提供します。
Java国際化は、Javaアプリケーションが異なる言語、数値形式、通貨、地域固有の時間形式を処理できるようにします。
ローカライゼーション
ローカリゼーションまたはL10Nは、アプリケーションが特定の言語、数値形式、日付と時刻の設定などに適応する方法であるアプリケーションの適応性です。
Javaアプリケーションは、ローカライズできるように国際化する必要があります。
文化依存情報
次の情報項目は、多くの場合、タイムゾーンや文化によって異なります。
- メッセージ
- Date
- Time
- 数
- 通貨
- 測定値
- 電話番号
- 住所 *GUIラベル
国際化クラス
Javaには、アプリケーションの国際化に役立つ組み込みクラスのセットがあります。 これらのクラスは次のとおりです。
Sr.No. | Class & Description |
---|---|
1 |
国/地域とともに言語を表します。 |
2 |
ResourceBundle ローカライズされたテキストまたはオブジェクトが含まれます。 |
3 |
NumberFormat ロケールに従って数字/通貨をフォーマットするために使用します。 |
4 |
DecimalFormat カスタマイズされたフォーマットおよびロケールに従って数値をフォーマットするために使用します。 |
5 |
DateFormat ロケールごとに日付をフォーマットするために使用します。 |
6 |
SimpleDateFormat カスタマイズされたフォーマットおよびロケールに従って日付をフォーマットするために使用します。 |
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-環境設定
この章では、Javaに適した環境を設定するさまざまな側面について説明します。
ローカル環境のセットアップ
Javaプログラミング言語用に環境をセットアップする場合は、このセクションで、マシンにJavaをダウンロードしてセットアップする方法を説明します。 環境を設定する手順は次のとおりです。
Java SEは、https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151l [Download Java]のリンクから無料で入手できます。 オペレーティングシステムに基づいてバージョンをダウンロードできます。
指示に従ってJavaをダウンロードし、*。exe *を実行して、マシンにJavaをインストールします。 マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります-
Windows用のパスのセットアップ
_c:\ Program Files \ java \ jdk_ディレクトリにJavaをインストールしたと仮定します-
- 「マイコンピュータ」を右クリックして、「プロパティ」を選択します。
- 「詳細」タブの下の「環境変数」ボタンをクリックします。
- ここで、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。 たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合、パスを「C:\ WINDOWS \ SYSTEM32; c:\ Program Files \ java \ jdk \ bin」に変更します。
Linux、UNIX、Solaris、FreeBSDのパスのセットアップ
環境変数PATHは、Javaバイナリがインストールされている場所を指すように設定する必要があります。 これがうまくいかない場合は、シェルのドキュメントを参照してください。
たとえば、_bash_をシェルとして使用する場合、次の行を '.bashrcの最後に追加します。export PATH =/path/to/java:$ PATH'
人気のあるJavaエディター
Javaプログラムを作成するには、テキストエディターが必要です。 市場にはさらに洗練されたIDEがあります。 しかし、今のところ、次のいずれかを検討することができます-
- メモ帳-Windowsマシンでは、メモ帳(このチュートリアルに推奨)、TextPadなどの単純なテキストエディタを使用できます。
- Netbeans -https://www.netbeans.org/indexlからダウンロードできるオープンソースで無料のJava IDE。
- Eclipse -eclipseオープンソースコミュニティが開発したJavaIDE。https://www.eclipse.org/からダウンロードできます。
次は何ですか?
次の章では、最初のJavaプログラムと、アプリケーションの開発に必要なJavaの重要な基本構文のいくつかを作成して実行する方法を説明します。
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-ロケールクラス
Localeクラスオブジェクトは、特定の地理的/政治的/文化的地域を表します。 ロケールがタスクを実行することを必要とする操作はロケール依存操作と呼ばれ、ロケールを使用してユーザーに関連する情報をマスターします。 たとえば、数字の表示はロケールに依存する操作です。 番号は、ユーザーの母国、地域、または文化の習慣と慣習に従ってフォーマットする必要があります。
ロケールの内容
Localeオブジェクトには次のものが含まれます。
- 言語-ISO 639 alpha-2またはalpha-3言語コード、または8文字までの登録済み言語サブタグ。 alpha-2コードとalpha-3コードの両方が存在する場合は、alpha-2コードを使用する必要があります。 言語フィールドは大文字と小文字を区別しませんが、Localeは常に小文字に正規化します。
- スクリプト-ISO 15924 alpha-4スクリプトコード。 スクリプトフィールドは大文字と小文字を区別しませんが、ロケールは常にタイトルケースに正規化します。
- 国(地域)-ISO 3166 alpha-2国コードまたはUN M.49 numeric-3市外局番。 国フィールドは大文字と小文字を区別しませんが、ロケールは常に大文字に正規化します。
- Variant -ロケールのバリエーションを示すために使用される任意の値。 それぞれ独自のセマンティクスを示す2つ以上のバリアント値がある場合、これらの値は重要度順に並べ、最も重要なものは最初にアンダースコア( '_')で区切る必要があります。 バリアントフィールドでは大文字と小文字が区別されます。
- 拡張機能-単一文字キーから文字列値へのマップで、言語識別とは別に拡張機能を示します。 Localeの拡張機能は、BCP 47拡張機能サブタグと私用サブタグのセマンティクスと構文を実装します。 拡張機能では大文字と小文字は区別されませんが、Localeはすべての拡張機能のキーと値を小文字に正規化します。
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-ロケールの詳細
この例では、デフォルトのロケールを取得し、その詳細を出力します。 次に、「fr」のロケールを作成し、その詳細を印刷します。
I18NTester.java
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale locale =Locale.getDefault();
System.out.println("Default Locale Properties:\n");
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getDisplayLanguage());
System.out.println(locale.getDisplayName());
System.out.println(locale.getISO3Country());
System.out.println(locale.getISO3Language());
System.out.println(locale.getLanguage());
System.out.println(locale.getCountry());
Locale frenchLocale = new Locale("fr","fr");
System.out.println("\nfr Locale Properties:\n");
System.out.println(frenchLocale.getDisplayCountry());
System.out.println(frenchLocale.getDisplayLanguage());
System.out.println(frenchLocale.getDisplayName());
System.out.println(frenchLocale.getISO3Country());
System.out.println(frenchLocale.getISO3Language());
System.out.println(frenchLocale.getLanguage());
System.out.println(frenchLocale.getCountry());
}
}
出力
次の結果が出力されます。
Default Locale Properties:
United States
English
English (United States)
USA
eng
en
US
fr Locale Properties:
France
French
French (France)
FRA
fra
fr
FR
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-ロケール言語
この例では、引数として渡されたロケールごとに表示言語を取得します。
I18NTester.java
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale defaultLocale = Locale.getDefault();
Locale enLocale = new Locale("en", "US");
Locale frLocale = new Locale("fr", "FR");
Locale esLocale = new Locale("es", "ES");
System.out.println(defaultLocale.getDisplayLanguage(enLocale));
System.out.println(defaultLocale.getDisplayLanguage(frLocale));
System.out.println(defaultLocale.getDisplayLanguage(esLocale));
}
}
出力
次の結果が出力されます。
English
anglais
inglés
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-ResourceBundleクラス
ResourceBundleクラスは、ロケールに依存するテキストとオブジェクトを保存するために使用されます。 通常、プロパティファイルを使用してロケール固有のテキストを保存し、ResourceBundleオブジェクトを使用してそれらを表します。 Javaベースのアプリケーションでロケール固有のプロパティファイルを使用する手順は次のとおりです。
手順1:プロパティファイルを作成します。
英語ロケールのプロパティファイルが必要だとします。 次に、プロパティファイル名XXX_en_US.propertiesを作成します。XXXはファイルの名前で、en_USはEnglish(US)のロケールを表します。
Messages_en_US.properties
message=Welcome to finddevguides.COM!
フランス語ロケールのプロパティファイルを作成しましょう。 次に、プロパティファイル名XXX_fr_FR.propertiesを作成します。XXXはファイルの名前で、fr_FRはフランス語(フランス)のロケールを表します。
Messages_fr_FR.properties
message=Bienvenue sur finddevguides.COM!
ここでは、キーは同じですが、値は両方のプロパティファイルでロケール固有であることがわかります。
ステップ2:ResourceBundleオブジェクトを作成する
次の構文を使用して、プロパティファイル名とロケールでResourceBundleオブジェクトを作成します。
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
ステップ3:ResourceBundleオブジェクトから値を取得します。
キーを渡すことにより、ResourceBundleオブジェクトから値を取得します。
String value = bundle.getString("message");
例
次の例は、ResourceBundleオブジェクトを使用して、プロパティファイルからロケール固有の値を表示する方法を示しています。
IOTester.java
import java.util.Locale;
import java.util.ResourceBundle;
public class I18NTester {
public static void main(String[] args) {
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
System.out.println("Message in "+Locale.US +": "+bundle.getString("message"));
bundle = ResourceBundle.getBundle("Messages", Locale.FRANCE);
System.out.println("Message in "+Locale.FRANCE +": "+bundle.getString("message"));
}
}
出力
次の結果が出力されます。
Message in en_US: Welcome to finddevguides.COM!
Message in fr_FR: Bienvenue sur finddevguides.COM!
命名規則に関する注意
以下は、プロパティファイルの命名規則です。
- デフォルトロケールにマッピングされたプロパティファイルの場合、プレフィックスは必須ではありません。 message_en_US.propertiesは、message.propertiesと同等です。
- ロケールにマップされたプロパティファイルの場合、プレフィックスは2つの方法で添付できます。 message_fr.propertiesは、message_fr_FR.propertiesと同等です。
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-NumberFormatクラス
java.text.NumberFormatクラスは、特定のロケールに従って数値と通貨をフォーマットするために使用されます。 数値の形式は国によって異なります。 たとえば、デンマークでは数字の小数部はカンマを使用して整数部から分離されますが、イギリスでは区切り文字としてドットを使用します。
例-フォーマット番号
この例では、米国のロケールとデンマーク語のロケールに基づいて数値をフォーマットしています。
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}
出力
次の結果が出力されます。
100,76
100.76
link:/cgi-bin/printpage.cgi [__印刷]
Javaの内部化-形式通貨
この例では、米国のロケールとデンマーク語のロケールに基づいて通貨をフォーマットしています。
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getCurrencyInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}
出力
次の結果が出力されます。
kr 100,76
$100.76
link:/cgi-bin/printpage.cgi [__印刷]
Javaの内部化-フォーマットの割合
この例では、数値をパーセント形式でフォーマットしています。
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getPercentInstance(enLocale);
System.out.println(numberFormat.format(0.76));
}
}
出力
次の結果が出力されます。
76%
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-最小/最大精度の設定
この例では、整数と小数部分の両方に最小桁と最大桁を設定しています。
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
numberFormat.setMinimumIntegerDigits(2);
numberFormat.setMaximumIntegerDigits(3);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(3);
System.out.println(numberFormat.format(12234.763443));
}
}
出力
次の結果が出力されます。
234.763
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-丸めモードの設定
この例では、丸めモードを紹介しています。
IOTester.java
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
numberFormat.setMinimumFractionDigits(0);
numberFormat.setMaximumFractionDigits(0);
System.out.println(numberFormat.format(99.50));
numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);
System.out.println(numberFormat.format(99.50));
}
}
出力
次の結果が出力されます。
100
99
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-数値の解析
この例では、異なるロケールに存在する数値の解析を示しています。
IOTester.java
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.parse("100,76"));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.parse("100,76"));
}
}
出力
次の結果が出力されます。
100.76
10076
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-DecimalFormatクラス
java.text.DecimalFormatクラスは、カスタマイズされた形式およびロケールごとに数値をフォーマットするために使用されます。
例-フォーマット番号
この例では、与えられたパターンに基づいて数字をフォーマットしています。
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
String pattern = "####,####.##";
double number = 123456789.123;
DecimalFormat numberFormat = new DecimalFormat(pattern);
System.out.println(number);
System.out.println(numberFormat.format(number));
}
}
出力
次の結果が出力されます。
1.23456789123E8
1,2345,6789.12
link:/cgi-bin/printpage.cgi [__印刷]
Javaの内部化-書式設定パターン
以下は、フォーマットパターンでの文字の使用です。
Sr.No. | Class & Description |
---|---|
1 |
0 桁数が少ない場合に0を表示します。 |
2 |
# 先行ゼロを省略した数字を表示します。 |
3 |
. 小数点区切り。 |
4 |
, グループ化区切り。 |
5 |
E 指数形式の仮数および指数セパレータ。 |
6 |
; フォーマット区切り。 |
7 |
- 負の番号プレフィックス。 |
8 |
% 100で乗算した後、パーセンテージとして数値を表示します。 |
9 |
? 1000で乗算した後、数値をミルとして表示します。 |
10 |
X 文字を数字の接頭辞/接尾辞としてマークします。 |
11 |
'' 特殊文字を引用符で囲みます。 |
この例では、さまざまなパターンに基づいて数値をフォーマットしています。
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
String pattern = "###.###";
double number = 123456789.123;
DecimalFormat numberFormat = new DecimalFormat(pattern);
System.out.println(number);
//pattern ###.###
System.out.println(numberFormat.format(number));
//pattern ###.#
numberFormat.applyPattern("###.#");
System.out.println(numberFormat.format(number));
//pattern ###,###.##
numberFormat.applyPattern("###,###.##");
System.out.println(numberFormat.format(number));
number = 9.34;
//pattern 000.###
numberFormat.applyPattern("000.##");
System.out.println(numberFormat.format(number));
}
}
出力
次の結果が出力されます。
1.23456789123E8
1,2345,6789.12
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-ロケール固有のDecimalFormat
デフォルトでは、DecimalFormatオブジェクトはJVMのロケールを使用しています。 NumberFormatクラスを使用してDecimalFormatオブジェクトを作成しながら、デフォルトのロケールを変更できます。 以下の例では、2つの異なるロケールに同じパターンを使用し、出力の違いを見つけることができます。
IOTester.java
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
String pattern = "###.##";
double number = 123.45;
Locale enlocale = new Locale("en", "US");
Locale dalocale = new Locale("da", "DK");
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(enlocale);
decimalFormat.applyPattern(pattern);
System.out.println(decimalFormat.format(number));
decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(dalocale);
decimalFormat.applyPattern(pattern);
System.out.println(decimalFormat.format(number));
}
}
出力
次の結果が出力されます。
123.45
123,45
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-DecimalFormatSymbolsクラス
DecimalFormatSymbolsクラス、デフォルトの区切り記号、グループ化区切り記号などの使用 変更可能。 次の例は同じことを示しています。
IOTester.java
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class I18NTester {
public static void main(String[] args) {
String pattern = "#,###.###";
double number = 126473.4567;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
System.out.println(decimalFormat.format(number));
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(';');
decimalFormatSymbols.setGroupingSeparator(':');
decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
System.out.println(decimalFormat.format(number));
}
}
出力
次の結果が出力されます。
126,473.457
126:473;457
link:/cgi-bin/printpage.cgi [__印刷]
Javaの内部化-数字のグループ化
DecimalFormatのsetGroupingSize()メソッドを使用すると、数値のデフォルトのグループ化を変更できます。 次の例は同じことを示しています。
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
double number = 121223232473.4567;
DecimalFormat decimalFormat = new DecimalFormat();
System.out.println(number);
System.out.println(decimalFormat.format(number));
decimalFormat.setGroupingSize(4);
System.out.println(decimalFormat.format(number));
}
}
出力
次の結果が出力されます。
1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-DateFormatクラス
java.text.DateFormatクラスは、ロケールに従って日付をフォーマットします。 異なる国では異なる形式を使用して日付を表示します。 このクラスは、アプリケーションの内部化で日付を扱うのに非常に役立ちます。 次の例は、DateFormatクラスを作成して使用する方法を示しています。
IOTester.java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale locale = new Locale("da","DK");
DateFormat dateFormat = DateFormat.getDateInstance();
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
System.out.println(dateFormat.format(new Date()));
}
}
出力
次の結果が出力されます。
Nov 29, 2017
29-11-2017
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-日付のフォーマット
DateFormatクラスは、日付をフォーマットするためのさまざまなフォーマットを提供します。 以下は、いくつかの形式のリストです。
- DateFormat.DEFAULT
- DateFormat.SHORT
- DateFormat.MEDIUM
- DateFormat.LONG
- DateFormat.FULL
次の例では、さまざまな形式の使用方法を示します。
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
出力
次の結果が出力されます。
Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017
link:/cgi-bin/printpage.cgi [__印刷]
Javaの内部化-時間のフォーマット
DateFormatクラスは、時間をフォーマットするためのさまざまなフォーマットを提供します。 DateFormat.getTimeInstance()メソッドが使用されます。 下記の例をご覧ください。
次の例では、さまざまなフォーマットを使用して時間をフォーマットする方法を示します。
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
出力
次の結果が出力されます。
4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-日付と時刻のフォーマット
DateFormatクラスは、日付と時刻を一緒にフォーマットするためのさまざまなフォーマットを提供します。 DateFormat.getDateTimeInstance()メソッドが使用されます。 下記の例をご覧ください。
次の例では、さまざまなフォーマットを使用して日付と時刻をフォーマットする方法を示します。
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
出力
次の結果が出力されます。
Nov 29, 2017 4:16:13 PM
11/29/17 4:16 PM
Nov 29, 2017 4:16:13 PM
November 29, 2017 4:16:13 PM IST
Wednesday, November 29, 2017 4:16:13 PM IST
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-SimpleDateFormatクラス
java.text.SimpleDateFormatクラスは、指定されたパターンに従って日付をフォーマットします。 また、stringが前述の形式の日付を含む場合、stringから日付を解析するためにも使用されます。 SimpleDateFormatクラスを使用する次の例を参照してください。
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String pattern = "dd-MM-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(date);
System.out.println(simpleDateFormat.format(date));
String dateText = "29-11-2017";
date = simpleDateFormat.parse(dateText);
System.out.println(simpleDateFormat.format(date));
}
}
出力
次の結果が出力されます。
Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-ロケール固有の書式設定日
ロケールを使用して、SimpleDateFormatクラスのパターンにロケール固有のフォーマットを作成できます。 ロケール固有のSimpleDateFormatクラスを使用する次の例を参照してください。
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Locale locale = new Locale("da", "DK");
String pattern = "EEEEE MMMMM yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(date);
System.out.println(simpleDateFormat.format(date));
simpleDateFormat = new SimpleDateFormat(pattern,locale);
System.out.println(simpleDateFormat.format(date));
}
}
出力
次の結果が出力されます。
Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-DateFormatSymbolsクラス
DecimalFormatSymbolsクラス、デフォルトの区切り記号、グループ化区切り記号などの使用 変更可能。 次の例は同じことを示しています。
IOTester.java
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class I18NTester {
public static void main(String[] args) {
String pattern = "#,###.###";
double number = 126473.4567;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
System.out.println(decimalFormat.format(number));
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(';');
decimalFormatSymbols.setGroupingSeparator(':');
decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
System.out.println(decimalFormat.format(number));
}
}
出力
次の結果が出力されます。
126,473.457
126:473;457
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-日付形式パターン
以下は、日付書式設定パターンでの文字の使用です。
Sr.No. | Class & Description |
---|---|
1 |
G 時代を表示します。 |
2 |
y 年を表示します。 有効な値はyy、yyyyです。 |
3 |
M 月を表示します。 有効な値は、MM、MMM、またはMMMMMです。 |
4 |
d 月の日を表示します。 有効な値はd、ddです。 |
5 |
h 時刻を表示するには(1〜12 AM/PM)。 有効な値はhhです。 |
6 |
H 時刻(0〜23)を表示します。 有効な値HH。 |
7 |
m 分(0〜59)を表示します。 有効な値はmmです。 |
8 |
s 秒(0〜59)を表示します。 有効な値ss。 |
9 |
S ミリ秒(0〜999)を表示します。 有効な値SSS。 |
10 |
E 曜日を表示するには(例:月曜日、火曜日など) |
11 |
D 年の日(1〜366)を表示します。 |
12 |
F 月の曜日を表示するには(例: 12月の第1木曜日)。 |
13 |
w 年の週を表示するには(1〜53)。 |
14 |
W 月の週を表示するには(0〜5) |
15 |
a AM/PMを表示するには |
16 |
k 1日の時間を表示するには(1〜24)。 |
17 |
K 日中の時間を表示するには、AM/PM(0-11)。 |
18 |
z タイムゾーンを表示します。 |
この例では、さまざまなパターンに基づいて日付をフォーマットしています。
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String pattern = "dd-MM-yy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(simpleDateFormat.format(date));
pattern = "MM-dd-yyyy";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
pattern = "yyyy-MM-dd HH:mm:ss";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
}
}
出力
次の結果が出力されます。
29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-UTC
UTCは協定世界時を表します。 これは時間標準であり、世界中で一般的に使用されています。 すべてのタイムゾーンは、UTCをオフセットとして比較的計算されます。 たとえば、デンマークのコペンハーゲンの時間はUTC + 1はUTC時間+ 1時間を意味します。 夏時間とは独立しており、データベースに日付と時刻を保存するために使用する必要があります。
タイムゾーンの変換
次の例では、さまざまなタイムゾーンの変換を示します。 時間とミリ秒で時刻を出力します。 1つ目はさまざまで、2つ目は同じままです。
IOTester.java
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Calendar date = new GregorianCalendar();
date.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
date.set(Calendar.HOUR_OF_DAY, 12);
System.out.println("UTC: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("UTC: " + date.getTimeInMillis());
date.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
System.out.println("CPH: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("CPH: " + date.getTimeInMillis());
date.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println("NYC: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("NYC: " + date.getTimeInMillis());
}
}
出力
次の結果が出力されます。
UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540
利用可能なタイムゾーン
次の例は、システムで利用可能なタイムゾーンを示しています。
IOTester.java
import java.text.ParseException;
import java.util.TimeZone;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String[] availableIDs = TimeZone.getAvailableIDs();
for(String id : availableIDs) {
System.out.println("Timezone = " + id);
}
}
}
出力
次の結果が出力されます。
Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST
link:/cgi-bin/printpage.cgi [__印刷]
Java内部化-文字列とのUnicode変換
Javaでは、テキストは内部的にUnicode形式で保存されます。 入力/出力が異なる形式の場合、変換が必要です。
変換
次の例では、Unicode文字列のUTF8 byte []への変換とUTF8 byte []からUnicode byte []への変換を示します。
IOTester.java
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.ParseException;
public class I18NTester {
public static void main(String[] args) throws ParseException, UnsupportedEncodingException {
String unicodeString = "\u00C6\u00D8\u00C5" ;
//convert Unicode to UTF8 format
byte[] utf8Bytes = unicodeString.getBytes(Charset.forName("UTF-8"));
printBytes(utf8Bytes, "UTF 8 Bytes");
//convert UTF8 format to Unicode
String converted = new String(utf8Bytes, "UTF8");
byte[] unicodeBytes = converted.getBytes();
printBytes(unicodeBytes, "Unicode Bytes");
}
public static void printBytes(byte[] array, String name) {
for (int k = 0; k < array.length; k++) {
System.out.println(name + "[" + k + "] = " + array[k]);
}
}
}
出力
次の結果が出力されます。
UTF 8 Bytes[0] = -61
UTF 8 Bytes[1] = -122
UTF 8 Bytes[2] = -61
UTF 8 Bytes[3] = -104
UTF 8 Bytes[4] = -61
UTF 8 Bytes[5] = -123
Unicode Bytes[0] = -58
Unicode Bytes[1] = -40
Unicode Bytes[2] = -59
link:/cgi-bin/printpage.cgi [__印刷]
Javaの内部化-リーダー/ライターとのUnicode変換
ReaderおよびWriterクラスは、文字指向のストリームクラスです。 これらは、Unicode文字の読み取りと変換に使用できます。
変換
次の例では、ReaderクラスとWriterクラスを使用して、Unicode文字列をUTF8 byte []に、UTF8 byte []をUnicode byte []に変換する例を示します。
IOTester.java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.ParseException;
public class I18NTester {
public static void main(String[] args) throws ParseException, IOException {
String input = "This is a sample text" ;
InputStream inputStream = new ByteArrayInputStream(input.getBytes());
//get the UTF-8 data
Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
//convert UTF-8 to Unicode
int data = reader.read();
while(data != -1){
char theChar = (char) data;
System.out.print(theChar);
data = reader.read();
}
reader.close();
System.out.println();
//Convert Unicode to UTF-8 Bytes
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
writer.write(input);
writer.close();
String out = new String(outputStream.toByteArray());
System.out.println(out);
}
}
出力
次の結果が出力されます。
This is a sample text
This is a sample text
link:/cgi-bin/printpage.cgi [__印刷]