我正在尝试将Threeten日期时间设置为从yyyy-MM-dd'T'HH:mm:ss
到yyyy-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
有人可以帮我吗?
答案 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
。
请参见下文toString
中LocalDateTime
的实施方式:
@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
对象中的存储方式无关紧要。我们始终可以根据需要以所需的格式创建字符串。