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

使用java.time类解析带有省略分钟的日期-时间输入字符串

刘畅
2023-03-14

2018-01-23T12

在让每小时的分钟默认为零的同时,如何解析它?

2018-01-23T12:00

LocalDateTime ldt = LocalDateTime.parse( "2018-01-23T12:00" ) ;  // Works.
LocalDateTime ldt = LocalDateTime.parse( "2018-01-23T12" ) ;  // Fails.
String input = "2018-01-23T12";

DateTimeFormatterBuilder b = new DateTimeFormatterBuilder().parseDefaulting( ChronoField.MINUTE_OF_HOUR , 0 ).parseDefaulting( ChronoField.SECOND_OF_MINUTE , 0 ).appendPattern( "uuuu-MM-dd HH" );
DateTimeFormatter f = b.toFormatter( Locale.US );
LocalDateTime ldt = LocalDateTime.parse( input , f );
System.out.println( ldt );

在java.base/java.time.format.DateTimeFormatter.ParsereSolved0(DateTimeFormatter.java:1988)

在java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)

在java.base/java.time.localDateTime.parse(localDateTime.java:492)

在com.basilbourque.example.app.main(app.java:22)

共有1个答案

危烨煜
2023-03-14

如果仔细查看错误消息,您会看到它说:文本'2018-01-23T12'不能在索引10处解析,这意味着问题是格式中的T。

如果我们回到DateTimeFormatterBuilder,则指定的模式是:“uuuu-mm-dd hh”。这里有一个问题,当实际上存在T时,它指定了一个空格。解决方案是将此模式替换为:“uuuu-mm-dd't'hh”

String input = "2018-01-23T12";

DateTimeFormatterBuilder b = new DateTimeFormatterBuilder().parseDefaulting( ChronoField.MINUTE_OF_HOUR , 0 ).parseDefaulting( ChronoField.SECOND_OF_MINUTE , 0 ).appendPattern( "uuuu-MM-dd'T'HH" );
DateTimeFormatter f = b.toFormatter( Locale.US );
LocalDateTime ldt = LocalDateTime.parse( input , f );
System.out.println( ldt );

2018-01-23T12:00

String input = "2018-01-23T12";

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f );
 类似资料:
  • 问题内容: 如何将类似“ 01-Jan-1995”的字符串解析为Python对象? 问题答案: 总体来说,您可以使用或模块中的函数来分析日期和时间字符串。您的示例可以解析为: 请注意,解析月份的名称是与语言环境相关的。下表显示了用于解析日期和时间的各种格式的指令。

  • 我正在尝试在中解析这些日期,然后获取表示形式。 我阅读了这个类似的答案,并创建了一个方法来解析上述日期并返回具有所需格式的: 然而,没有一个图案是匹配的。我这里缺少什么? 更新:在这两个日期中,我都收到了字符的异常。

  • (我想)快速提问。如何将解析为(将时间设置为)? java.time.format.DateTimeParseException:无法分析文本“2007-07-21+00:00”:无法从TemporalAccessor获取OffsetDateTime:{offsetseconds=0},ISO解析为类型java.time.format.Parsed的2007-07-21

  • 我想从格式为“2021-12-10T18:49:00-05:00”的字符串中解析带有时区的日期。我尝试使用“date('Y-m-dh:I:s',strotime($myDate))”进行解析。但这是第二天的返回日期。非常感谢您的帮助。

  • 本实例演示了如何通过DateFormat类的parse方法根据不同的本地环境解析日期/时间字符串,并将其转换成Date对象。在最后还演示了parse方法如何解析不符合日期/时间逻辑的字符串。 例子 : 解析日期/时间字符串 实例的代码如下: package chapter8; import java.text.DateFormat; import java.util.Date; import ja

  • 我需要在Dart中的对象中解析这种日期“Mon,2014年8月11日12:53 pm PDT”。 有一个静态方法,它接受ISO 8601格式的子集,而不是我的情况。 类允许您定义要分析的日期模式。我创建了一个模式“EEE,dd-MMM-yyy-hh:mm-a-zzz”。 使用它,我得到一个读取一个。 看起来解析器不喜欢PM标记的情况(我已经提出了一个问题)。 我试着解决整个管柱上套管的问题。使用字