单y
可以解析一个+位数的年份
注意:两位数的年份将被解析为没有世纪的年份,例如19
将被解析为0019
. 如果您想要它2019
,请使用yy
.
演示:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/y", Locale.ENGLISH);
Stream.of(
"01/01/1",
"01/01/19",
"01/01/192",
"01/01/1921",
"01/01/19211"
).forEach( s -> System.out.println(LocalDate.parse(s, dtf)));
}
}
输出:
0001-01-01
0019-01-01
0192-01-01
1921-01-01
+19211-01-01
ONLINE DEMO
因此,您需要从结果日期获取年份的值并验证年份,例如
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/y", Locale.ENGLISH);
int year = LocalDate.parse("01/01/19211", dtf).getYear();
if (year < 1900 || year > 9999) {
// Do this
} else {
// Do that
}
}
}
您可能还想检查喜欢u
。y
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
注意:日期java.util
时间 API 及其格式化 APISimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。