我正在使用课程shown in this Question将Jalali(shamsi)日期转换为格鲁吉亚语。
通过以下命令,我将Hijri日期变为格鲁吉亚语
Date dt = JalaliCalendar.getGregorianDate("1397/01/14");
Toast.makeText(getApplicationContext(), dt.toString(), Toast.LENGTH_LONG).show();
我想按如下方式显示结果:2018/04/03
答案 0 :(得分:2)
警告:除了花费两分钟扫描维基百科页面之外,我对Jalali calendar和Hijri calendar都一无所知。但我或许可以帮助您找到解决方案的一部分。
你正在使用几年前由 java.time 类取代的麻烦的旧日期时间类。
java.time 类与HijrahChronology
的Chronology
实现捆绑在一起。
java.time.chrono.Chronology
我没有看到与{em> java.time 捆绑在一起的Jalali日历的Chronology
的任何实现,也没有ThreeTen-Extra的provide other chronologies项目。
我想如果有人确实提供了这样的实现,那可能是理想的。也许这样的实现可以通过遵循与Java捆绑的HijrahChronology
的示例来编写。
以下是我对使用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页上所示。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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);