如何本地化Java Calendar类?

时间:2014-03-18 04:12:24

标签: java date datetime localization calendar

是否可以本地化Java日历类以将当前系统日期转换为例如Jalali(波斯语)日期?

2 个答案:

答案 0 :(得分:3)

创建实例时,您会传递Locale,例如

Calendar.getInstance(Locale.US);

答案 1 :(得分:1)

本地化

  

如何本地化Java Calendar类?

您没有。相反,您可以对ZonedDateTime对象进行本地化。

可怕的Calendar类,实际上是GregorianCalendar,被ZonedDateTime类所取代。 Java最早的版本(DateCalendarSimpleDateFormatjava.sql.Timestampjava.sql.Date等)中所有糟糕的旧日期时间类都是被现代的 java.time 类所取代。

您可以通过调用添加到旧类中的新方法,轻松地将旧类从现代类转换为现代类。

ZonedDateTime zdt = ( ( GregorianCalendar ) myCalendar ).toZonedDateTime() ;

现在,让DateTimeFormatter自动进行本地化,同时生成一个以文本形式表示日期时间值的String

要本地化,请指定:

  • FormatStyle来确定字符串应该是多长时间或缩写。
  • Locale确定:
    • 用于翻译日名,月名等的人类语言
    • 文化规范决定缩写,大写,标点,分隔符等问题。

示例:

Locale l = Locale.CANADA_FRENCH ; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
                                       .withLocale( l ) ;
String output = zdt.format( f ) ;

Jalali日历

  

将当前系统日期转换为例如Jalali (Persian) date

Java确实与Hijrah日历系统ChronologyHijrahChronology实现捆绑在一起。也许这可能满足您的需求(除ISO 8601外,我几乎不了解其他时间顺序)。

您可以通过searching Stack Overflow了解更多有关此的信息。

如果该实现无法满足您的需求,则可以在其他地方找到一个或自行开发。除了与Java捆绑在一起的几种开源年代外,您还可以在several more项目中找到ThreeTen-Extra,它们都是开源的。您可能会从其他来源找到其他人。


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore