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

Java解析字符串到LocalDateTime而不提供时间[重复]

公羊涛
2023-03-14

基本上我有一个领域

private LocalDateTime date;
DateTimeFormatter formatter = null;
if (value.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}")) {
    formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
} else if (value.matches("\\d{4}-\\d{2}-\\d{2}")) {
    formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
}
// Throws an exception for pattern "yyyy-MM-dd"
date = LocalDateTime.parse(value, formatter);
java.time.format.DateTimeParseException: Text '2000-06-29' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2000-06-29 of type java.time.format.Parsed
at pl.empirica.swissborg.service.util.CsvBeanUtils.copyList(CsvBeanUtils.java:75) ~[classes/:na]
at pl.empirica.swissborg.service.csv.CsvReaderService.persistCsvData(CsvReaderService.java:101) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354) ~[spring-beans-4.2.7.RELEASE.jar:4.2.7.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:305) ~[spring-beans-4.2.7.RELEASE.jar:4.2.7.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133) ~[spring-beans-4.2.7.RELEASE.jar:4.2.7.RELEASE]
... 18 common frames omitted
Caused by: java.lang.RuntimeException: java.time.format.DateTimeParseException: Text '2000-06-29' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2000-06-29 of type java.time.format.Parsed
at pl.empirica.swissborg.service.util.CsvBeanUtils.copyFields(CsvBeanUtils.java:58) ~[classes/:na]
at pl.empirica.swissborg.service.util.CsvBeanUtils.copyList(CsvBeanUtils.java:70) ~[classes/:na]
... 26 common frames omitted
Caused by: java.time.format.DateTimeParseException: Text '2000-06-29' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2000-06-29 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(Unknown Source) ~[na:1.8.0_91]
at java.time.format.DateTimeFormatter.parse(Unknown Source) ~[na:1.8.0_91]
at java.time.LocalDateTime.parse(Unknown Source) ~[na:1.8.0_91]
at pl.empirica.swissborg.service.util.CsvBeanUtils.copyFields(CsvBeanUtils.java:47) ~[classes/:na]
... 27 common frames omitted
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2000-06-29 of type java.time.format.Parsed
at java.time.LocalDateTime.from(Unknown Source) ~[na:1.8.0_91]
at java.time.format.Parsed.query(Unknown Source) ~[na:1.8.0_91]
... 30 common frames omitted
Caused by: java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: {},ISO resolved to 2000-06-29 of type java.time.format.Parsed
at java.time.LocalTime.from(Unknown Source) ~[na:1.8.0_91]
... 32 common frames omitted

共有1个答案

温凯
2023-03-14

您的问题是LocalDateTime需要一个时间!

您有两个主要选项:

  • 像您一样使用两个格式化程序,但第二个分支应该是localdateTime d=localdate.parse(value,formatter).atStartOfDay()(例如)
  • 创建一个可以处理这两种格式的格式化程序

第二个选项可能是:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd")
        .optionalStart()
        .appendPattern(" HH:mm")
        .optionalEnd()
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .toFormatter();

它可以解析2016-10-012016-10-01 10:15

 类似资料:
  • 我有以下字符串格式的时间戳 如何将上面的时间戳字符串解析为?

  • 我有一个字符串时间格式。我没有找到任何格式来解析这个字符串值。有没有办法将这个字符串值转换为Gotime.Time? 编辑 - 这不是重复的问题。我知道如何解析,但我不知道我们可以使用时间格式包中列出的任何布局。这个答案清除了我的涂鸦。

  • 如何将字符串日期格式转换为日期,我有格式为以下格式的日期字符串: 接下来,我尝试了,但没有运气。 所有上述语句都存在解析错误。

  • 我有一根这样的绳子。 如何在Java中将字符串解析成多行?

  • 问题内容: 我想使用Java将变量字符串转换为时间类型变量,而不是日期。字符串看起来像这样17:40 我尝试使用下面的代码,但此实例是日期类型变量而不是时间 但是Netbean抱怨我应该插入如下异常: 任何想法我如何可以从上面的字符串中获取时间。 问题答案: java.sql.Time timeValue = new java.sql.Time(formatter.parse(fajr_praye

  • 这就是问题所在: 我有一些带有旅行信息的. csv文件,日期显示为字符串(每一行代表一次旅行): “1-5月和10-12月的所有星期一。6-9月的所有日子” 我必须将字符串解析为日期,并为每次旅行将其保存到一个数组中。 问题是我不知道怎么做。甚至我的大学老师也告诉我,他们不知道如何做到这一点:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/