【问题标题】:How to parse custom multiple Date formats in Java如何在 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 用场景更新问题
  • 当字符串中没有小时时,您想要或期望什么结果?

标签: java java-time


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多