我正在开发一个日期应用程序,用户将在其中输入日期并且我正在验证该日期。日期格式为dd/MM/yyyy. 这是我的代码import java.util.*;import java.text.SimpleDateFormat;import java.text.ParseException;public class HelloWorld { public static void main(String[] args) { //Scanner sc = new Scanner(System.in); String dat = "02/1/2018"; try { SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); df.setLenient(false); df.parse(dat); System.out.print("valid"); } catch (ParseException e) { System.out.print("invalid"); } } }这工作完美并验证了我的日期,但是当我像22/02/2-19这样输入我的日期时也有效。但它应该是无效的,因为我的年份是2-19.
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
时间
Basil Bourque 的出色回答已经为您的问题提供了最佳解决方案。我不重复。如果使用该答案,您希望在第一个示例中接受 1 位数字月份02/1/2018
,则您应该M
在格式模式字符串中只提供一个。然后这两个1
和01
将被接受。同样,一个人d
将同时接受2
和02
月份的某一天。
你的代码出了什么问题
SimpleDateFormat
从您的字符串中读取尽可能多的内容以匹配格式模式,但很高兴不阅读所有内容。对于您的第二个示例,22/02/2-19
它解析22/02/2
为Date
2016 年多年前的 Mon Jan 02 00:00:00 CET 2(确切结果取决于您的时区)。由于这是一个有效日期,因此不会引发任何异常。然后它会忽略字符串的最后三个字符。
添加回答
举报
0/150
提交
取消