java - 在java中将Jalali日历转换为格鲁吉亚日历

标签 java date converters

我正在使用类 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/

相关文章:

java - 带有嵌套对象的 BeanUtils Converter 自定义类

java - 为什么我的二进制到英文代码不能工作?

java - 在 JFRAME 中制作数基转换器

java - 在 Java 中解析 OCL?

java - jetty 9 websockets onFrame 事件

java - @Rolesallowed 是如何工作的

JavaScript 格式化带零的日期

java - 如何使用java读取位文件mpeg视频

java.sql.Time 对象与 java.sql.Date 对象混淆

MySQL:尝试获取当前时间的当前日期,没有分钟和秒