这看起来是一件很简单的事情,但我没有做到。
我有一个字符串模式,它是yyyyMMddHH,我试图将其解析为LocalDateTime的一个实例
代码如下:
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
class Main {
public static void main(String[] args) {
String pattern = "yyyyMMddHH";
String date = "2021061104";
DateTimeFormatter formatter =
new DateTimeFormatterBuilder()
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.parseLenient()
.appendPattern(pattern)
.toFormatter();
LocalDateTime ldt = LocalDateTime.parse(date, formatter);
}
}
它引发以下异常:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2021061104' could not be parsed at index 8
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at Main.main(Main.java:22)
无法从输入中解析HH字段
我在这里查看了javadoc,但这没有帮助。
为什么我会有这个例外?如何解决这个问题?
编辑:
我无法删除。parseDefaulting(ChronoField.HOUR\u OF\u DAY,0)
以下是限制条件:
模式
和日期
(可能是args[0]
和args[1]
)模式
中的时间是可选的,最多只能是小时。yyyy-MM-dd HH
,yyyy MM dd
使用这些约束,我无法删除. parseDefaulting(ChronoField.HOUR_OF_DAY,0)
,因为如果我这样做,我将无法将yyyy-MM-dd
解析为LocalDateTime
的实例
好吧,我认为这是由. parseDefaulting(ChronoField.HOUR_OF_DAY,0)
行引起的。构建器会在进行任何解析之前立即插入默认值。在解析时,小时组件已经有一个值,因此HH
的解析失败。
JavaDocs中实际上提到了这种行为:
在解析过程中,检查解析的当前状态。如果指定的字段没有关联的值,因为它在该点没有被成功解析,那么指定的值将被注入解析结果中。注入是立即的,因此字段值对将对格式化程序中的任何后续元素可见。因此,此方法通常在构建器的末尾调用。
强调我的。
因此,一个可能的修复方法是将parseDefaulting
行移动到格式化程序生成器的末尾:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseLenient()
.appendPattern(pattern)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter();
这是一个将这些行移动到构建器末尾的工作示例。
我试图告诉Gson如何解析LocalDateTime和LocalDate,但我遇到了这个错误,在我看来它应该与格式匹配。我在想,要么我对解析日期有些不了解,要么我对Gson有些不了解。 java.time.format.DateTimeParseException:无法在索引0解析文本2017101800000700
我正在开发新闻应用程序,我已经将从现在到那个日期的运行时间进行了转换,但当我运行代码时,我的适配器类中出现了以下异常 JAVA时间总体安排DateTimeParseException:无法在索引0处分析文本“09/10/2019”,无法在索引19处找到未分析的文本 低于我的适配器类 以下是JSON响应:
我正在尝试解析dd-MMM-yyyy格式的日期。 它抛出以下异常 它可以很好地解析dd-MM-yyyy格式,但无法解析dd-MM-yyyy格式。我厌倦了设置语言环境。美国也是,但在这种情况下也失败了。
dateTimeParseException:无法在索引0处分析文本“Tue Dec 30 14:28:38 CET 2014” 这是如何造成的,我该如何解决?