如何在 Java 中解析自定义的多种日期格式
Posted
技术标签:
【中文标题】如何在 Java 中解析自定义的多种日期格式【英文标题】:How to parse custom multiple Date formats in Java 【发布时间】:2020-12-30 08:06:03 【问题描述】:我想在 Java 中解析自定义的多种日期格式。这是我的代码
场景 1: 模式顺序:
yyMMdd'h'HH yyMMddDateTimeFormatter 格式化程序 = 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: 模式顺序:
yyMMdd yyMMdd'h'HHDateTimeFormatter 格式化程序 = 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);
如何使其适用于两种日期模式,而不考虑任何输入模式顺序。我不想为此使用任何外部依赖项。
【问题讨论】:
如果交换插入模式的顺序会怎样?从最通用到更具体(而不是从更具体到最通用)? 如果我交换订单就可以了。但是输入值应该与第一个模式匹配,如果不匹配,则会抛出错误。 不确定我是否理解,但第二个dateString1
与模式 yyMMdd'h'HH
不匹配,因为它缺少整个 'h'HH
组件。您需要将h00
之类的东西添加到第二个dateString1
中才能被第一个模式捕获。
@npinti 用场景更新问题
当字符串中没有小时时,您想要或期望什么结果?
【参考方案1】:
您可以使用[]
定义模式中的可选部分。此外,您需要设置默认值,以便在没有提供时间时不会出现异常。
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 中解析自定义的多种日期格式的主要内容,如果未能解决你的问题,请参考以下文章