如何在java中解析自定义的多种日期格式

i2byvkas  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(369)

我想用java解析自定义的多个日期格式。这是我的密码
场景1:模式顺序:
年月日
年月日
datetimeformatter formatter=new datetimeformatterbuilder().appendoptional(datetimeformatter.ofpattern(“yymmdd'h'hh”)).appendoptional(datetimeformatter.ofpattern(“yymmdd”)).toformatter();
作品:

String dateString1 = "201028h05";

LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);

不起作用:

String dateString2 = "201028";

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);

场景2:模式顺序:
年月日
年月日
datetimeformatter formatter=new datetimeformatterbuilder().appendoptional(datetimeformatter.ofpattern(“yymmdd”)).toformatter()。可选附件(模式的datetimeformatter.ofpattern(“yymmdd'h'hh”))
不起作用:

String dateString1 = "201028h05";

    LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);

作品:

String dateString2 = "201028";

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);

如何使其适用于两种日期模式,而不考虑任何输入模式顺序。我不想使用任何外部依赖。

5kgi1eie

5kgi1eie1#

你可以用 [] 定义阵列中的可选零件。此外,您还需要设置默认值,以便在没有提供时间时不会出现异常。

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern("yyMMdd['h'HH]")
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
        .toFormatter();

String dateString1 = "201028h05";
LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);
System.out.println(date1);

String dateString2 = "201028";
LocalDateTime date2 = LocalDateTime.parse(dateString2, formatter);
System.out.println(date2);

输出:

2020-10-28T05:00
2020-10-28T00:00

相关问题