无法将三点日期时间解析为特定格式

时间:2020-04-14 08:17:37

标签: java datetime

我正在尝试将Threeten日期时间设置为从yyyy-MM-dd'T'HH:mm:ssyyyy-MM-dd HH:mm:ss的格式。下面是我用来完成任务的代码。

public void testChangeFormat() {
    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
    DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    LocalDateTime date1 = LocalDateTime.parse("2020-03-10T15:14:05", inputFormatter);
    System.out.println(date1); // prints 2020-03-10T15:14:05
    String formattedDate = outputFormatter.format(date1);
    System.out.println(formattedDate); // prints 2020-03-10 15:14:05
    LocalDateTime newFormattedDateTime = LocalDateTime.parse(formattedDate);
    System.out.println(newFormattedDateTime);
}

一切似乎都按预期进行,直到我尝试将formattedDate的{​​{1}}解析为LocalDateTime为止

我什至使用LocalDateTime newFormattedDateTime = LocalDateTime.parse(formattedDate);将日期时间格式化为2020-03-10 15:14:05,但是当我尝试将其解析为LocalDateTime时,它给了我以下异常:

outputFormatter

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

LocalDateTime.parse(formattedDate)正在使用DateTimeFormatter.ISO_LOCAL_DATE_TIME(格式为yyyy-MM-dd'T'HH:mm:ss)。这就是为什么在尝试解析格式为yyyy-MM-dd HH:mm:ss的字符串时会出现异常的原因。您应该使用:

LocalDateTime.parse(formattedDate, outputFormatter),如果您出于某种原因再次要求对LocalDateTime进行解析。

注意: 您在第outputFormatter.format(date1)行有印刷格式吗?

答案 1 :(得分:1)

您似乎对LocalDateTime和格式(它是字符串表示形式)之间感到困惑。

例如,LocalDateTime在使用T打印对象时总是包含System.out.println(例如,您可能已经知道,它隐式调用toString

System.out.println(LocalDateTime.now());

将输出2020-04-14T09:36:04.723994

请参见下文toStringLocalDateTime的实施方式:

@Override
public String toString() {
    return date.toString() + 'T' + time.toString();
}

,因此您的以下语句将始终在其中显示'T'

System.out.println(newFormattedDateTime);

由您决定如何将LocalDateTime格式化为您选择的String表示形式。正如我在第一行中提到的,格式是字符串,即将LocalDateTime格式化为String表示形式,然后在其中可以应用DateTimeFormatter提供的所有选项。

formattedDate转换为LocalDateTime的正确方法是应用outputFormatter中指定的相应格式。

LocalDateTime newFormattedDateTime = LocalDateTime.parse(formattedDate,outputFormatter);

日期和时间在LocalDateTime对象中的存储方式无关紧要。我们始终可以根据需要以所需的格式创建字符串。