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
どのように毎回alarmTimeを作成していますか?そして括弧の中にプロセスIDの番号が入りますか?もう一度コードを再実行した場合、ケース1とケース2で同じ結果になるのはなぜですか? – Vahid
プロセスIDが同じであることは、私が見ている基本的な問題です。プロセスがなくなり、新しいものが始まると(ロケールがドイツ語に設定されている)、希望の結果が得られます(ケース3)。 –
あなたはalarmTimeを作成している場所でコードを共有できますか?また、Android用に開発中ですか? – Vahid