使用俄语语言环境时,在TimeZone中显示问题

时间:2010-08-10 07:03:58

标签: java timezone

我在使用俄语语言环境时遇到问题,时区部分日期未转换为俄语。 即如果“雅库茨克时间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);

2 个答案:

答案 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,请尝试抓取最新版本以查看您的时区是否受支持。