当前位置: 首页 > 知识库问答 >
问题:

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

狄飞鹏
2023-03-14

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

场景1:模式的顺序:

  • yyMMdd'h'HH
  • yyMMdd

DateTimeFormatter-formatter=new DateTimeFormatterBuilder().appendOptional(模式的日期时间格式设置工具(“yyMMdd'h'HH”)).appddOptional(格式的日期时间格式化工具(“yyMMdd”).toFormatter();

作品:

String dateString1 = "201028h05";

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

不起作用:

String dateString2 = "201028";

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

场景2:模式顺序:

    yyMMdd < li>yyMMdd'h'HH

datetime formatter formatter = new datetime formatter builder()。append可选(datetime formatter . of pattern(" yyMMdd "))。to formatter();。append可选(datetime formatter . of pattern(" yyMMdd ' h ' hh "))

不起作用:

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

作品:

String dateString2 = "201028";

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

如何使其适用于两个日期模式,而不考虑任何输入模式顺序。我不想为此使用任何外部依赖项。

共有1个答案

廖绍辉
2023-03-14

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

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中使用自定义日期格式。尽管Java不提供对微秒的支持,但它包含微秒。因此,我用零填充了时间模式,在格式化时它可以很好地工作,但是我无法使用该模式解析日期字符串。 有没有简单的解决方法,还是我必须自己处理微秒(使用String函数)? java.text.ParseException:无法解析的日期:“ 2010-01-25-12.40.35.769000” 问题答案:

  • 我想以“dd/mm/yyyy hh:mm”格式编写excel文件日期,例如2022年3月12日08:30 问题是我有所有这些值作为参数...我存储在数据库中的字段是: 我的目标是检索所有这些内容,并希望进行组合,得到“dd/mm/yyyyy hh:mm”的结果。 我可以将它们组合起来创建那个日期格式吗?我这样问是因为如果我在excel中以字符串的形式编写,那么这种类型可能会导致excel图形等出现

  • 问题内容: 我的日期格式 (可以是其他任何 格式 ) ,我需要在date命令中使用它。不是美国格式。它是德语服务器,因为它是德语服务器。这在美国服务器上也无法正常工作。(语言环境设置为德语或美国) 这不起作用(包括错误): (日期:ungültigesDatum„ Do 19 Dez 2013 22:33:28 CET“ =) 困难在于我不知道以后将使用哪种语言环境,甚至不知道日期格式,因为用户可

  • 问题内容: 我在中收到格式日期。我如何解析它得到和。 ISO格式的日期: 问题答案: 一些参考 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html 希望能帮助到你

  • 问题内容: SimpleDateFormat是一种非常友好的解析器,它滚动结果日期而不是抛出错误。如何在没有正则表达式等的情况下严格解析日期? 问题答案: 是您要寻找的。

  • 我想以yyyy-mm-dd格式存储今天的日期。在存储之前,我将今天的日期格式化,并再次解析格式化后的字符串。它以不同于我想要的格式给出了输出日期。我如何获得日期,将其格式化为' yyyy-mm-dd '并再次将其转换为日期,并希望输出格式为' yyyy-mm-dd '。请找到下面的代码,告诉我哪里错了 我得到的上述代码的输出是星期四 Mar 07 00:00:00 GMT 2013.但我希望输出为