java.time
你可以使用
DateTimeFormatterBuilder
构建解析器,可处理不区分大小写的解析、可选模式(放在方括号中)、默认缺失字段(例如
HOUR_OF_DAY
)等内容。
演示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoField;
import java.util.Locale;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
final DateTimeFormatter parser = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("[M/d/uu[ H:m]][d MMM u][M.d.u][E MMM d, u]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.toFormatter(Locale.ENGLISH);
Stream.of(
"Thu Apr 1, 2021",
"THU Apr 1, 2021",
"01/06/10",
"1 Jan 2009",
"1.2.2010",
"asdf"
).forEach(s -> {
try {
System.out.println(LocalDateTime.parse(s, parser));
} catch(DateTimeParseException e) {
System.out.println("\"" + s + "\"" + " could not be parsed. Error: " + e.getMessage());
}
});
}
}
输出:
2021-04-01T00:00
2021-04-01T00:00
2010-01-06T00:00
2009-01-01T00:00
2010-01-02T00:00
"asdf" could not be parsed. Error: Text 'asdf' could not be parsed, unparsed text found at index 0
从教程:日期时间了解更多关于现代日期时间 API 的内容。