输入只有月和日时,先补上年份再构造 LocalDate。下面同时接受 9.1、9.01 和 09.01,并检查闰年与无效日期。
需要 JDK 8 或更高版本。保存为 DateDemo.java:
import java.time.LocalDate;import java.time.format.DateTimeFormatter;import java.time.format.DateTimeFormatterBuilder;import java.time.format.DateTimeParseException;import java.time.format.ResolverStyle;import java.time.temporal.ChronoField;
public class DateDemo { public static LocalDate parseDate(String text, int year) { DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("M.d") .parseDefaulting(ChronoField.YEAR, year) .toFormatter() .withResolverStyle(ResolverStyle.STRICT); try { return LocalDate.parse(text, formatter); } catch (DateTimeParseException e) { throw new IllegalArgumentException("无效日期:" + text, e); } }
public static void main(String[] args) { System.out.println(parseDate("9.01", 2026)); System.out.println(parseDate("2.29", 2024)); }}javac -encoding UTF-8 DateDemo.javajava DateDemo输出 2026-09-01 和 2024-02-29。把第二个年份改为 2025 会抛出异常,因为该年不是闰年。
parse 把文字解析为日期,format 把日期格式化为文字。TemporalAccessor 是解析结果的通用接口,但不是处理这类输入的唯一方式。
评论