2017-10-04 9 views
2

withLocaleを使用してロケールをドイツ語に設定すると、am/pm文字列は時間値にローカライズされますが、そのロケールに適した24時間形式に変換します。Jodaの使用DateTimeFormatter.withLocale()は、時刻形式ではなく、am/pmの文字列値にのみ影響します

Locale.setLocale(Locale.GERMAN);を実行して新しいプロセスを作成すると、フォーマットは正しいです。

withLocale()は、問題のロケールのすべての側面に影響しませんか?

// Code snippet where call is being made: 
Log.d(TAG, "XYZZY getDefault(): " + Locale.getDefault().toString()); 
DateTimeFormatter timeFormat = DateTimeFormat.shortTime() 
      .withLocale(Locale.getDefault()); 
Log.d(TAG, "XYZZY timeFormat.locale: " + 
      timeFormat.getLocale().toString()); 
dateString = alarmTime.toString(timeFormat); 
Log.d(TAG, "XYZZY dateString: "+ dateString); 

変数alarmTime 11:00 PM(2300時間)の値を有する:

10-04 14:17:41.492(23609):XYZZYのgetDefault()はen_US
10 -04 14:17:41.493(23609):XYZZY timeFormat.locale:en_USの
10-04 14:17:41.495(23609):XYZZY日付ストリング:11:00 PM

今すぐドイツ語のロケールに切り替えます再実行します同じコード、時間ドイツ語ではなく、形式に「PM」変更 文字列に注意してください(接尾 が抑制されなければならないと時間値が23時00分でなければなりません):

10-04午前14時18分:15.066(23609):XYZZY getDefault():de_DE
10-04 14:18:15.066(23609):XYZZY timeFormat.locale:de_DE
10-04 14:18:15.067(23609):XYZZY dateString:11 :00 nachm。

プロセスが離れて行くとドイツ などのロケールを残して、再起動され、現在はドイツ語の正しい時刻形式が返される待ち:

10-04 14:18:54.497( 23881):XYZZYのgetDefault():de_DEの
10-04 14:18:54.497(23881):XYZZY timeFormat.locale:de_DEの
10-04 14:18:54.498(23881):XYZZY日付ストリング:23:00

+0

どのように毎回alarmTimeを作成していますか?そして括弧の中にプロセスIDの番号が入りますか?もう一度コードを再実行した場合、ケース1とケース2で同じ結果になるのはなぜですか? – Vahid

+0

プロセスIDが同じであることは、私が見ている基本的な問題です。プロセスがなくなり、新しいものが始まると(ロケールがドイツ語に設定されている)、希望の結果が得られます(ケース3)。 –

+0

あなたはalarmTimeを作成している場所でコードを共有できますか?また、Android用に開発中ですか? – Vahid

答えて

0

免責事項:を再現できませんでしたので、答えはありませんが、問題を再現しようとした方法の詳細を表示するための回答として書かれています。

私はJDK 1.8.0_91とジョダタイム2.9.9を使用して、タイムゾーンAmerica/New_Yorkにロケールen_USで実行していますよ。し、ロケールを変更することなく、正常に動作しますshortTime()

テスト

LocalTime time = LocalTime.parse("23:00"); 
System.out.println(time); 
System.out.println(time.toString(DateTimeFormat.shortTime())); 
System.out.println(time.toString(DateTimeFormat.shortTime().withLocale(Locale.GERMANY))); 

出力

23:00:00.000 
11:00 PM 
23:00 

JVMのデフォルトロケールは変更されませんでした。

+0

これをありがとう、アンドレアス、私はあなたがここに示したものに基づいてもう少し詳しく調査します。私はJDK 1.7.0_151を使用していますが、JodaTimeのバージョンを確認していません(プログラムでこれを発見する方法はありますか?) –

+0

わかりませんが、jarファイル名には通常バージョン番号があります。 – Andreas

+0

@BillB 'DateTime.class.getPackage()。getSpecificationVersion()'または 'DateTime.class.getPackage()。getImplementationVersion()'を試すことができます。とにかく、私は問題を再現しようとしました(EclipseのJDK 1.7.0_80)、成功しませんでした。 Androidに特有のものかもしれません。 –

関連する問題