【发布时间】:2020-02-20 02:43:20
【问题描述】:
我有这段代码可以将String双向解析为LocalDateTime:
public class ConvertLocalDateToString {
private static final DateTimeFormatter CUSTOM_LOCAL_DATE;
static {
CUSTOM_LOCAL_DATE = new DateTimeFormatterBuilder()
.appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
.appendLiteral('-')
.appendValue(MONTH_OF_YEAR, 2)
.appendLiteral('-')
.appendValue(DAY_OF_MONTH, 2)
.appendLiteral(' ')
.appendValue(HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendLiteral(':')
.appendValue(SECOND_OF_MINUTE, 2)
.toFormatter();
}
public static void main(String[] args) {
String str = "2020-02-18 15:04:30";
LocalDateTime dateTime = LocalDateTime.parse(str, CUSTOM_LOCAL_DATE); //2020-02-18T15:04:30
LocalDateTime addedDateTime = LocalDateTime.parse(dateTime.plusHours(10).format(CUSTOM_LOCAL_DATE.withZone(ZoneOffset.UTC)));
System.out.println(addedDateTime);
System.out.println(dateTime); //2020-02-18T15:04:30
}
我的假设是“T”字母是由 ISO-8601 格式自动生成的。这导致:
DateTimeParseException:无法在索引 10 处解析文本“2020-02-18 15:04:30”
我该如何摆脱它?
【问题讨论】:
-
LocalDateTime 中没有 T。这只是 System.out.println 如何工作的人工制品。如果您想要不同的格式,请在打印之前使用一种格式设置 LocalDateTime。
-
乍一看有点难看,但您对
LocalDateTime.parse的第二次调用实际上并未将 CUSTOM_LOCAL_DATE 作为第二个参数传递。 one-argument LocalDate.parse method 需要 ISO 8601 格式,包括T。
标签: java datetime java-8 datetime-format