在以下代码中 输入:
Enter Date: 3/2/2011
输出:
Entered Date is February 3, 2011
Entered Month is 02
问题是,当我输入此日期3/14/2012
时,日期格式功能会自动将月份更改为12+2
(二月)。如果我添加13/15/2011
,则会将月份更改为3(12+3)
。
{em}
14
答案 0 :(得分:4)
对于每个DateFormat
实例,您需要使用false参数调用setLenient
:
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setLenient(false);
DateFormat f = new SimpleDateFormat("dd");
f.setLenient(false);
DateFormat m = new SimpleDateFormat("MM");
m.setLenient(false);
来自DateFormat#setLenient(boolean)
文档:
通过宽松解析,解析器可以使用启发式方法来解释与该对象的格式不完全匹配的输入。通过严格的解析,输入必须与此对象的格式匹配。
答案 1 :(得分:2)
参考这些格式Java Date Format Docs:
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
您希望月份位于第二位,而输入则将其放在第一位。
尝试:
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
答案 2 :(得分:0)
您是否尝试在DateFormat上使用“setLenient(false)”来强制DateFormat严格解析输入? 我还没有尝试过,但最近偶然发现了这个功能。