也许这个问题很愚蠢,但我没有找到任何令我满意的答案。
我有一个SimpleDataFormat,如:
sdf = new SimpleDateFormat("dd/MM/yyyy");
如果我尝试解析日期:10/10/15
然后日期结果是第15年,而不是2015年。
为什么parse
在这种情况下有效?我期待ParseException
我如何强制用户将年份换成4位数格式? (请不要String.length()
)
我正在使用setLenient(false)
答案 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(),或者你可以解析它并检查日期范围。