SimpleDateFormat中的两位数年份

时间:2015-05-22 13:34:04

标签: java date simpledateformat

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

我有一个SimpleDataFormat,如:

sdf = new SimpleDateFormat("dd/MM/yyyy");

如果我尝试解析日期:10/10/15

然后日期结果是第15年,而不是2015年。

为什么parse在这种情况下有效?我期待ParseException

我如何强制用户将年份换成4位数格式? (请不要String.length()

我正在使用setLenient(false)

2 个答案:

答案 0 :(得分:4)

您的日期按字面解释。每http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

  

"对于解析,如果模式字母的数量大于2,则   无论数字位数如何,年份都按字面解释。所以   使用模式" MM / dd / yyyy"," 01/11/12"解析到1月11日,12日A.D。"

这也是您没有得到预期异常的原因。

答案 1 :(得分:2)

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