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

我想在 Java 中解析自定义的多种日期格式。这是我的代码

场景 1:
模式的顺序:

  • yyMMdd'h'HH
  • 年月日

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);
String dateString2 = "201028";

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

场景 2:
模式的顺序:

  • 年月日
  • yyMMdd'h'HH

DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendOptional(DateTimeFormatter.ofPattern("yyMMdd")).toFormatter(); .appendOptional(DateTimeFormatter.ofPattern("yyMMdd'h'HH"))

不起作用:

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

作品:

无论任何输入模式顺序如何,如何使其适用于两种日期模式。我不想为此使用任何外部依赖。

回答

您可以使用[]来定义模式中的可选部分。此外,您需要设置默认值,以便在没有提供时间时不会出现异常。

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


以上是如何在Java中解析自定义的多种日期格式的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>