用java将Jalali日历转换为格鲁吉亚语

用java将Jalali日历转换为格鲁吉亚语,java,date,converter,Java,Date,Converter,我正在使用该类将shamsi date转换为格鲁吉亚语 使用下面的命令,我将Hijri日期转换为格鲁吉亚语 Date dt = JalaliCalendar.getGregorianDate("1397/01/14"); Toast.makeText(getApplicationContext(), dt.toString(), Toast.LENGTH_LONG).show(); 我想将结果显示如下:2018/04/03尝试使用SimpleDataFormatter,如下所示:

我正在使用该类将shamsi date转换为格鲁吉亚语

使用下面的命令,我将Hijri日期转换为格鲁吉亚语

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

我想将结果显示如下:2018/04/03

尝试使用SimpleDataFormatter,如下所示:

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

尝试使用SimpleDataFormatter,如下所示:

    DateFormat df= new SimpleDateFormat( "YYYY/MM/dd" );
    String formattedDate = df.format(dt);
警告:除了花两分钟浏览维基百科页面外,我对这两种情况一无所知。但我也许能帮你找到解决办法

java.time 您使用的是多年前被java.time类取代的麻烦的旧日期时间类

time类与的实现捆绑在一起

建议:实现java.time.chrono.chronoloy 我没有看到与java.time捆绑在一起的Jalali日历的任何实现,也没有在这样的项目中看到

我想,如果有人真的贡献了这样一个实现,这可能是理想的。也许可以通过遵循捆绑Java的示例来编写这样的实现

Hijri不是Jalali 下面是我使用HijrahDate类的无知尝试

ld.toString:2018-04-03

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

这对于本页所示的Hijri日历似乎是正确的

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 更高版本的Android捆绑包实现了java.time类。 对于早期的安卓警告:除了花两分钟扫描维基百科页面外,我对任何一个都不知道。但我也许能帮你找到解决办法

java.time 您使用的是多年前被java.time类取代的麻烦的旧日期时间类

time类与的实现捆绑在一起

建议:实现java.time.chrono.chronoloy 我没有看到与java.time捆绑在一起的Jalali日历的任何实现,也没有在这样的项目中看到

我想,如果有人真的贡献了这样一个实现,这可能是理想的。也许可以通过遵循捆绑Java的示例来编写这样的实现

Hijri不是Jalali 下面是我使用HijrahDate类的无知尝试

ld.toString:2018-04-03

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

这对于本页所示的Hijri日历似乎是正确的

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 更高版本的Android捆绑包实现了java.time类。 对于早期的Android在Android上使用my library或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));
在Android上使用my library或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));

格式化模式区分大小写。YYYY大写表示基于周的年,而不是日历年。请不要?