转换日期格式:Java 中的转换错误?

Vam*_*nti 0 java datetime date datetime-parsing

我正在尝试将此日期转换为不同的格式。不幸的是还没有成功解析日期并正确保留所有信息。

2017 年 12 月 6 日 07:14:56.656PM 至 2017-12-06 19:14:56.656

如果我尝试解析输入日期

LocalDateTime.parse("06-Dec-2017 07:14:56.656PM",
        DateTimeFormatter.ofPattern("D-MMM-yyyy HH:mm:ss.SSSa"));
Run Code Online (Sandbox Code Playgroud)

我收到以下错误 - 不确定这是什么意思?

Exception in thread "main" java.time.format.DateTimeParseException: Text '06-Dec-2017 07:14:56.656PM' could not be parsed: Conflict found: Field MonthOfYear 1 differs from MonthOfYear 12 derived from 2017-01-06
    at java.time.format.DateTimeFormatter.createError(Unknown Source)
    at java.time.format.DateTimeFormatter.parse(Unknown Source)
    at java.time.LocalDateTime.parse(Unknown Source)
    at com.cordys.coe.alf.logger.DBLogger.main(DBLogger.java:366)
Caused by: java.time.DateTimeException: Conflict found: Field MonthOfYear 1 differs from MonthOfYear 12 derived from 2017-01-06
    at java.time.format.Parsed.crossCheck(Unknown Source)
    at java.time.format.Parsed.crossCheck(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

如果尝试

System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")
        .format((new SimpleDateFormat("DD-MMM-yyyy HH:mm:ss.SSSa")
                .parse("06-Dec-2017 07:14:56.656PM"))));
Run Code Online (Sandbox Code Playgroud)

它给出了以下令人困惑且可能不正确的内容。2017-01-06 07:14:56:656

Spr*_*ner 5

你有2个问题

  1. D 应该是 d

D 代表一年中的某一天

d 代表月中的某一天

  1. HH应该是hh

H 表示一天中的小时 (0-23)

h 表示clock-hour-of-am-pm (1-12)

D-MMM-yyyy HH:mm:ss.SSSa改为d-MMM-yyyy hh:mm:ss.SSSa

有关更多信息,请查看oracle 文档