Java 简单格式的两位数年份

Java 简单格式的两位数年份,java,date,simpledateformat,Java,Date,Simpledateformat,也许这个问题很愚蠢,但我没有找到任何让我满意的答案 我有一个SimpleData格式,如: sdf = new SimpleDateFormat("dd/MM/yyyy"); 如果我试图解析一个日期,比如:10/10/15 那么日期结果是第15年,而不是2015年 在这种情况下,parse为什么起作用?我希望出现ParseException 我如何强制用户以4位数格式输入年份?(不带String.length()请) 我使用的是setLenient(false)这是因为当你说dd/MM/yyy

也许这个问题很愚蠢,但我没有找到任何让我满意的答案

我有一个SimpleData格式,如:

sdf = new SimpleDateFormat("dd/MM/yyyy");
如果我试图解析一个日期,比如:
10/10/15

那么日期结果是第15年,而不是2015年

在这种情况下,
parse
为什么起作用?我希望出现
ParseException

我如何强制用户以4位数格式输入年份?(不带
String.length()
请)


我使用的是
setLenient(false)

这是因为当你说
dd/MM/yyyyy
时,java希望你提供“全年”,但它不一定必须是4位数的年份。它类似于
MMMMM
——这并不意味着您只需要该月的5个字符,而是意味着您需要完整的月份名称。我相信您必须使用String.length(),或者您可以解析它并检查日期范围。

您的日期是按字面解释的。

对于解析,如果模式字母的数量大于2,则 年份是按字面解释的,不管数字是多少 使用“MM/dd/yyyy”模式,“01/11/12”解析为公元12年1月11日


这也是为什么你没有得到你所期望的异常。

看来你真的在做年份
15
是一个有效的日期,不是吗?@gtgaxiola不,我是问为什么用两位数的年份来解析是有效的。我希望它失败,我希望强制日期为四位数的年份。日期总是“不确定的”。如果我可以引用加勒比海盗的话,格式“更像是你所说的‘指导原则’,而不是实际规则”。从解析的
中,如果模式字母的数量超过2,则不管数字的多少,年份都是按字面解释的。因此,使用模式“MM/dd/yyyy”,“01/11/12”解析为公元12年1月11日。
@gtgaxiola谢谢:)我想我将使用字符串长度。为什么java不期望“完整的单词年”?要指定第15年,我可以简单地写0015。为什么不是这样?@JohnnyWiller因为。。。这就是Sun/Oracle的人员设计的方式,他们建造了这个。我们无法告诉你他们当时在想什么。。。