Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中解析自定义的多种日期格式_Java_Java Time - Fatal编程技术网

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

如何在Java中解析自定义的多种日期格式,java,java-time,Java,Java Time,我想用Java解析自定义的多种日期格式。这是我的密码 场景1: 图案顺序: String dateString1 = "201028h05"; LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter); String dateString2 = "201028"; LocalDateTime date1 = LocalDateTime.parse(dateString2, fo

我想用Java解析自定义的多种日期格式。这是我的密码

场景1: 图案顺序:

String dateString1 = "201028h05";

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

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

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
  • yyMMdd'h'HH
  • 年月日
DateTimeFormatter formatter=新的DateTimeFormatterBuilder() .appendOptional(模式的日期时间格式(“yyMMdd'h'HH”)) .appendOptional(模式的DateTimeFormatter.of(“yyMMdd”).toFormatter()

有效:

String dateString1 = "201028h05";

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

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

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
不起作用:

String dateString1 = "201028h05";

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

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

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
场景2: 图案顺序:

String dateString1 = "201028h05";

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

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

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
  • 年月日
  • yyMMdd'h'HH
DateTimeFormatter formatter=新的DateTimeFormatterBuilder() .appendOptional(模式的DateTimeFormatter.of(“yyMMdd”).toFormatter(); .appendOptional(模式的日期时间格式(“yyMMdd'h'HH”))

不起作用:

String dateString1 = "201028h05";

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

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

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
有效:

String dateString1 = "201028h05";

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

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

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

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

您可以使用
[]
定义模式中的可选部分。此外,您需要设置默认值,以便在没有提供时间的情况下不获取异常

DateTimeFormatter formatter=新的DateTimeFormatterBuilder()
.appendPattern(“yyMMdd['h'HH]”)
.parseDefaulting(ChronoField.HOUR\u OF_DAY,0)
.parseDefaulting(ChronoField.MINUTE\u OF_HOUR,0)
.parseDefaulting(ChronoField.SECOND\u/u分钟,0)
.toFormatter();
字符串dateString1=“201028h05”;
LocalDateTime date1=LocalDateTime.parse(dateString1,格式化程序);
系统输出打印项次(日期1);
字符串dateString2=“201028”;
LocalDateTime date2=LocalDateTime.parse(dateString2,格式化程序);
系统输出打印项次(日期2);
输出:


如果交换插入模式的顺序会怎么样?从最普通到更具体(而不是更具体到最普通)?如果我交换订单,它会起作用。但输入值应该与第一个模式匹配,如果不匹配,则会抛出错误。我不确定是否理解,但第二个
dateString1
与模式
yymmd'h'HH
,因为它缺少整个
'h'HH
组件。您需要在第二个
dateString1
中添加某种
h00
类型的内容,才能被第一个模式捕获。@npinti使用场景更新问题当字符串中没有小时时,您希望或期望得到什么样的结果?这很有效。