【问题标题】:Java Localized CalendarJava 本地化日历
【发布时间】:2011-08-14 14:45:21
【问题描述】:

我正在开发一个国际化应用程序,我需要在其中动态更改我的日历而不更改代码。如您所知,Calendar.getInstance() 返回的是公历,调用 Calendar.getInstance() 时如何使用不同的日历。因此,我在不更改代码的情况下动态更改本地化日历。

最好的

【问题讨论】:

    标签: java internationalization calendar


    【解决方案1】:

    使用factory 这样做:

    public static Calendar getInstance(TimeZone zone, Locale aLocale)
    

    【讨论】:

      【解决方案2】:

      如果你想使用不同的日历系统(真的很难说你在做什么),那么ICU4J Project是你的朋友。
      它包含几个不同的日历系统(参见com.ibm.icu.util 包)。

      要使用不同的日历系统,只需使用有效的ULocale 实例化日历即可:

      // valid for desktop applications, for web you'd do it differently
      ULocale arabicLocale = new ULocale("ar_SA@calendar=islamic");
      Calendar calendar = Calendar.getInstance(arabicLocale);
      

      不幸的是,我可以提供帮助,但您似乎必须通过特定的 ULocale 标识符来分配日历系统。我不知道他们为什么没有设置正确的默认值...无论如何...

      ICU 还提供了自己的 DateFormatTimeZone 实现,恐怕这是你应该用来格式化日历的。幸运的是,他们的实现接受Calendar,所以它实际上更容易使用:

      TimeZone currentTimeZone = TimeZone.getDefault();
      DateFormat formatter = DateFormat.getDateTimeInstance(
          DateFormat.DEFAULT, DateFormat.DEFAULT, arabicLocale);
      formatter.setTimeZone(currentTimeZone);
      String formattedDateTime = formatter.format(calendar);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多