由于这个问题实际上是关于新的 - 包而不是,我将引用以下相关部分:java.time
SimpleDateFormat
年份:字母计数确定使用填充的最小字段宽度。如果字母计数为 2,则使用简化的两位数形式。对于打印,这将输出最右边的两位数字。对于解析,这将使用基值 2000 进行分析,从而得出 2000 到 2099(含)范围内的年份。
我们看到 Java-8 默认使用 2000-2099 的范围,而不是相对于今天 ,直到 +20 年的范围为 -80 年。SimpleDateFormat
如果你想配置它,那么你必须使用 appendValueReduced()。这是以不方便的方式设计的,但有可能,请参阅此处:
String s = "150790";
// old code with base range 2000-2099
DateTimeFormatter dtf1 =
new DateTimeFormatterBuilder().appendPattern("ddMMyy").toFormatter();
System.out.println(dtf1.parse(s)); // 2090-07-15
// improved code with base range 1935-2034
DateTimeFormatter dtf2 =
new DateTimeFormatterBuilder().appendPattern("ddMM")
.appendValueReduced(
ChronoField.YEAR, 2, 2, Year.now().getValue() - 80
).toFormatter();
System.out.println(dtf2.parse(s)); // 1990-07-15
顺便说一句,如果您真的想要基于周的年份,那么您必须使用Y而不是y或适当的字段 。关于您没有任何其他与周相关的字段这一事实,我将假设是正常的日历年,而不是基于周的日历年。IsoFields.WEEK_BASED_YEAR