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

使用DateTimeFormatter解析AM/PM时间时的Java 8 DateTimeParseException

越嘉茂
2023-03-14
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class FormatterExample {
    private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm a");
    public static void main(String[] args) {
        parseDateAndPrint("08:06 AM");
        parseDateAndPrint("08:06 PM");
    }
    public static void parseDateAndPrint(String time) {
        LocalTime localTime = LocalTime.parse((time), timeFormatter);
        System.out.println(localTime.format(timeFormatter));
    }
}
08:06 AM
Exception in thread "main" java.time.format.DateTimeParseException: Text '08:06 PM' could not be parsed: Conflict found: Field AmPmOfDay 0 differs from AmPmOfDay 1 derived from 08:06
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1919)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1854)
    at java.time.LocalTime.parse(LocalTime.java:441)
    at FormatterExample.parseDateAndPrint(FormatterExample.java:11)
    at FormatterExample.main(FormatterExample.java:8)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.time.DateTimeException: Conflict found: Field AmPmOfDay 0 differs from AmPmOfDay 1 derived from 08:06
    at java.time.format.Parsed.crossCheck(Parsed.java:582)
    at java.time.format.Parsed.crossCheck(Parsed.java:563)
    at java.time.format.Parsed.resolve(Parsed.java:247)
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1954)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1850)
    ... 8 more
Text '08:06 PM' could not be parsed: Conflict found: Field AmPmOfDay 0 differs from AmPmOfDay 1 derived from 08:06

但这就是我卡住的地方..我不确定这个错误到底是什么意思,但它肯定与输入字符串的AM/PM部分有关。我也尝试搜索类似的错误,但我没有找到任何东西。我有一种感觉,我可能在定义格式化程序模式时犯了一个简单的错误,但我卡住了。任何帮助都将不胜感激!

共有1个答案

丘向荣
2023-03-14

您使用了错误的模式h是hour-of day(0-23);您需要h

错误是告诉您h是24小时,而8显然是AM。因此,当您告诉解析器在24小时内使用8并告诉解析器它是PM时,它就会爆炸。

简而言之,阅读文档。

 类似资料:
  • 问题内容: 我正在尝试使用Java 8 将格式化的字符串解析为对象。但是,我在解析某些输入字符串时遇到了一些问题。当我的输入字符串具有“ AM”时,它将正确解析,但是当我的字符串具有“ PM”时,它将引发异常。这是一个简单的例子: 输出: 因此可以正确解析,但是会在消息中抛出DateTimeParseException: 但是,这就是我遇到的问题。.我不太确定该错误的确切含义,但这绝对与输入字符串

  • 我在这里有我的日期来自我的API,我试图在其中解析到。我使用intl包尝试了以下方法,但我遇到了错误 未处理的异常:格式异常:尝试从 2020/07/07 09:47:54 在位置 20 读取 有人知道这里出了什么问题吗?

  • 我得到一个变量字符串,如下所示: 上午8点45分 如果是下午,则希望将其转换为24小时制。这样我就可以放下am/pm,用它来做别的事情。 我可以像这样轻松地放弃am/pm: 当然,如果我这样做,我不知道字符串是am还是pm,所以我不知道在字符串上加上12小时,使它成为24小时。 有人知道我该如何解决这个问题吗?我绝对无法更改我得到的变量输入,它将始终是小时(在 12 小时内)、分钟和 am 或 p

  • 问题内容: 我正在尝试使用Java 8 DateTime API解析日期时间字符串。 要解析的字符串包含日期,月份,年份和AM / PM标记,例如。我使用以下模式:并且我希望将解析的LocalDateTime时间部分设置为AM / PM标记或取决于AM / PM标记。 使用以前的API,解析可以使用此模式按预期进行。 但是当我使用Java 8 DateTime API并运行以下代码时: 我得到以下

  • 问题内容: 我要格式化的字符串如下所示:String datetime =“ 9/1/10 11:34:35 AM” SimpleDateFormat的以下模式有效: 但是,我还需要解析AM / PM标记,当我将其添加到模式中时会收到异常。 无效的模式: 我也尝试过与此相同的例外: 例外: 我已经通过http://download.oracle.com/javase/1.4.2/docs/api/

  • 我想以12小时格式显示时间,而不使用和。例如,仅而不包括或。如何修改以不显示而是以12数字格式显示? null null