在Java中将Jalali日历转换为格鲁吉亚语

时间:2018-04-03 18:46:15

标签: java date converter

我正在使用课程shown in this QuestionJalali(shamsi)日期转换为格鲁吉亚语。

通过以下命令,我将Hijri日期变为格鲁吉亚语

Date dt = JalaliCalendar.getGregorianDate("1397/01/14");
    Toast.makeText(getApplicationContext(), dt.toString(), Toast.LENGTH_LONG).show();

我想按如下方式显示结果:2018/04/03

3 个答案:

答案 0 :(得分:2)

警告:除了花费两分钟扫描维基百科页面之外,我对Jalali calendarHijri calendar都一无所知。但我或许可以帮助您找到解决方案的一部分。

java.time

你正在使用几年前由 java.time 类取代的麻烦的旧日期时间类。

java.time 类与HijrahChronologyChronology实现捆绑在一起。

建议:实施java.time.chrono.Chronology

我没有看到与{em> java.time 捆绑在一起的Jalali日历的Chronology的任何实现,也没有ThreeTen-Extraprovide other chronologies项目。

我想如果有人确实提供了这样的实现,那可能是理想的。也许这样的实现可以通过遵循与Java捆绑的HijrahChronology的示例来编写。

Hijri(不是Jalali)

以下是我对使用HijrahDate课程的无知尝试。

LocalDate ld = LocalDate.of( 2018, Month.APRIL , 3 ) ;  // Western calendar, defined in `IsoChronology` class:  https://docs.oracle.com/javase/10/docs/api/java/time/chrono/IsoChronology.html
HijrahDate hd = HijrahDate.from( ld  );  // Using class java.time.chrono.HijrahChronology  https://docs.oracle.com/javase/10/docs/api/java/time/chrono/HijrahChronology.html
  

ld.toString():2018-04-03

     

hd.toString():Hijrah-umalqura AH 1439-07-17

对于Hijri日历来说,这似乎是正确的,如Iranian Calendar Converter页上所示。

screenshot of Iranian calendar converter for 2018-04-03 converting to both Jalali & Hijri

关于 java.time

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

现在位于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

答案 1 :(得分:1)

使用我的库Time4J(或Android上的Time4A)可以启用以下简短解决方案:

String input = "1397/01/14";
PersianCalendar jalali =
    ChronoFormatter
        .ofPattern("yyyy/MM/dd", PatternType.CLDR, Locale.ROOT, PersianCalendar.axis())
        .parse(input);
PlainDate gregorian = jalali.transform(PlainDate.axis());
String iso8601 = Iso8601Format.EXTENDED_DATE.format(gregorian);
System.out.println(iso8601); // 2018-04-03

无需实现自己的日历年表(这通常是一项复杂的任务)。如果你想用斜杠而不是ISO格式获得结果,那么只需使用另一个格式化程序:

String output = ChronoFormatter
        .ofPattern("yyyy/MM/dd", PatternType.CLDR, Locale.ROOT, PlainDate.axis())
        .format(gregorian);

答案 2 :(得分:-1)

尝试使用SimpleDateFormatter,如下所示:

    DateFormat df= new SimpleDateFormat( "YYYY/MM/dd" );
    String formattedDate = df.format(dt);