你可以建立自己的DateTimeFormatter
。
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ISO_ZONED_DATE_TIME)
.appendOptional(DateTimeFormatter.ISO_LOCAL_DATE)
.appendOptional(new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR, 4)
.optionalStart()
.appendValue(ChronoField.MONTH_OF_YEAR)
.optionalEnd()
.appendLiteral('T')
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1L)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1L)
.toFormatter())
.toFormatter();
String[] strings = {"2016-10-01", "2016T", "201610T", "2016-02-07T22:03:39.937Z"};
for (String s : strings) {
System.out.println(LocalDate.parse(s, dateTimeFormatter)
.format(DateTimeFormatter.BASIC_ISO_DATE));
}
在所有情况下你只需要日期(LocalDate)吗?或者当你需要一天的时间(最后一个例子)? –
我不明白'20161001'的月份可能是一月份吗?一个错字? –
@ OleV.V。我认为这不是一个错字。如果有一个月(在这种情况下,'10'),则只有一天默认为'1'。如果没有月份,则默认为1月份。 –