明确使用withLocale
将语言环境设置为德语会导致am / pm字符串在时间值中进行本地化,但不会转换为适合该语言环境的24小时时间格式。
创建新流程后,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点(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 dateString: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 dateString:23:00
答案 0 :(得分:0)
免责声明:不是答案,因为我无法复制,而是写作答案,以显示我如何尝试重现问题。
我使用JDK 1.8.0_91和 Joda-Time 2.9.9 在时区en_US
中使用区域设置America/New_York
运行。
测试
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
shortTime()
可以正常工作,无论是否更改区域设置。
JVM默认语言环境从未更改过。