如何用日期之间的时间解析 DateTime?

How to parse DateTime with Time between the dates?

我想解析一个日期时间变体,该变体的时间介于两个日期之间。为什么以下内容不起作用?

DateTimeFormatter.ofPattern("E L  d HH:mm:ss yyyy").parse("Tue Mar  1 01:29:47 2022")

结果:

java.time.format.DateTimeParseException: Text 'Tue Mar 1 01:29:47 2022' could not be parsed at index 4

我认为你必须确保

  • 您为缩写的月份和星期几提供了特定的Locale
  • 您在 DateTimeFormatter
  • 的模式中使用了正确的字符

一年中的一个月使用模式中的字符 M 进行解析,您必须确保使用了正确的语言并且 M 的数量符合要求(例如 EEEE 将解析一周中的一整天,如 "Monday")。这可以通过将 Locale 传递给 DateTimeFormatter 来确保。具有单个 d 的模式将解析一个月中没有前导零的天数,而 dd 将需要前导零到一个月中的 single-digit 天。

这是一个解析两个日期时间的示例,一个是 single-digit 月中的某一天,另一个是

DateTimeFormatter customDtf = DateTimeFormatter.ofPattern(
        "EEE MMM d HH:mm:ss yyyy",
        Locale.ENGLISH
);
    
System.out.println( // parse a datetime with a two-digit day of month
        LocalDateTime.parse("Mon Mar 14 01:29:47 2022", customDtf)
);
System.out.println( // parse a datetime with a one-digit day of month
        LocalDateTime.parse("Tue Mar 1 01:29:47 2022", customDtf)
);

如果您在 main 中执行此示例代码,您将获得以下输出:

2022-03-14T01:29:47
2022-03-01T01:29:47