我正在使用类 shown in this Question转换Jalali (shamsi)日期为格鲁吉亚语。
通过以下命令,我将回历日期转换为格鲁吉亚日期
Date dt = JalaliCalendar.getGregorianDate("1397/01/14");
Toast.makeText(getApplicationContext(), dt.toString(), Toast.LENGTH_LONG).show();
我想显示结果如下:2018/04/03
最佳答案
使用我的图书馆 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);
评论中问题的更新:
如果输入包含时间部分,那么整个内容就是时间戳而不是日历日期。因此用户可以解析一下。
TZID tzid = () -> "Asia/Tehran"; // used as default time zone for parsing
ChronoFormatter<Moment> f =
ChronoFormatter.setUpWithOverride(Locale.ENGLISH, PersianCalendar.axis())
.addPattern("yyyy/MM/dd HH:mm[:ss]", PatternType.CLDR) // optional seconds
.build()
.withTimezone(tzid);
Moment expected =
PlainTimestamp.of(2018, 4, 3, 10, 15, 5).inTimezone(tzid);
assertThat(
f.parse("1397/01/14 10:15:05"),
is(expected));
解析的时刻可以通过这种方式转换回波斯日历:
assertThat(
expected.toGeneralTimestamp(PersianCalendar.axis(), tzid, StartOfDay.MIDNIGHT).toDate(),
is(PersianCalendar.of(1397, 1, 14)));
关于java - 在java中将Jalali日历转换为格鲁吉亚日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637134/