我在使用俄语语言环境时遇到问题,时区部分日期未转换为俄语。 即如果“雅库茨克时间2010年8月10日下午4:02:09”是时间, 它正在转换为 - 俄语语言环境 - “10.08.2010 16:02:09 Yakutsk Time 10” 使用法国语言环境 - “août201016:02:09 Heure du Iakoutsk”
我正在使用以下代码(我的服务器支持俄语语言环境)
SimpleDateFormat formatterWithoutTimezone = new SimpleDateFormat(
"dd-MMM-yyyy HH:mm:ss");
SimpleDateFormat formatterServerTimezone = new SimpleDateFormat(
"dd-MMM-yyyy HH:mm:ss zzz");
TimeZone serverTimezone = TimeZone.getDefault();
formatterServerTimezone.setTimeZone(serverTimezone);
String dateSrcStr = formatterWithoutTimezone.format(dateSrc) + " UTC";
Date dateServerTimezone = formatterServerTimezone.parse(dateSrcStr);
DateFormat displayFormatter = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
String formatedDate = displayFormatter.format(dateServerTimezone) + " "
+ serverTimezone.getDisplayName(locale);
答案 0 :(得分:3)
时区名称是通过Java从sun.util.resources.TimeZoneNamesBundle获得的。有一个TimeZoneNames基础资源类,并且有本地化(参见rt.jar):
TimeZoneNames_de.class
TimeZoneNames_en.class
TimeZoneNames_en_CA.class
TimeZoneNames_en_GB.class
TimeZoneNames_en_IE.class
TimeZoneNames_es.class
TimeZoneNames_fr.class
TimeZoneNames_it.class
TimeZoneNames_sv.class
因此,只有上述语言具有本地化的时区名称。以下测试确认大多数语言环境没有本地化的时区名称:
TimeZone timeZone = TimeZone.getTimeZone("Asia/Yakutsk");
for (Locale locale : Locale.getAvailableLocales()) {
System.out.println(locale.getDisplayName() + timeZone.getDisplayName(locale));
}
答案 1 :(得分:0)
Java拥有自己的内置时区定义。假设您的服务器上的时区很糟糕,那么问题可能在于Java定义。查找tzupdater以查看是否需要找到更新版本的时区,或者构建自己的时区。如果您使用的是旧JVM,请尝试抓取最新版本以查看您的时区是否受支持。