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

Posted

技术标签:

【中文标题】如何在 Java 中解析自定义的多种日期格式【英文标题】:How to parse custom multiple Date formats in Java 【发布时间】:2020-12-30 08:06:03 【问题描述】:

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

场景 1: 模式顺序:

yyMMdd'h'HH yyMMdd

DateTimeFormatter 格式化程序 = 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'HH

DateTimeFormatter 格式化程序 = 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 中解析自定义的多种日期格式的主要内容,如果未能解决你的问题,请参考以下文章

EXCEl表格里如何输入自定义格式的日期

EXCEL表格日期格式自定义如何设置

poi中如何自定义日期格式

Excel 如何将YYYY-MM-DD日期格式改为YYYYMMDD格式

excel表格自定义格式的日期怎么改成文本格式的日期?

在EXCEL中如何将日期格式转换,例如把2012/09/01变换成2012-09-01?