如何解析 Java 中的自定义多种日期格式
How to parse custom multiple Date formats in Java
我想解析 Java 中的自定义多种日期格式。这是我的代码
场景 1:
模式顺序:
- yyMMdd'h'HH
- yyMMdd
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);
场景二:
模式顺序:
- yyMMdd
- 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);
作品:
String dateString2 = "201028";
LocalDateTime date1 = LocalDateTime.parse(dateString2, 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 中的自定义多种日期格式。这是我的代码
场景 1: 模式顺序:
- yyMMdd'h'HH
- yyMMdd
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);
场景二: 模式顺序:
- yyMMdd
- 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);
作品:
String dateString2 = "201028";
LocalDateTime date1 = LocalDateTime.parse(dateString2, 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