千萬(wàn)里不及你
2021-07-08 22:01:48
我正在開(kāi)發(fā)一個(gè)日期應(yīng)用程序,用戶(hù)將在其中輸入日期并且我正在驗(yàn)證該日期。日期格式為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"); } } }這工作完美并驗(yàn)證了我的日期,但是當(dāng)我像22/02/2-19這樣輸入我的日期時(shí)也有效。但它應(yīng)該是無(wú)效的,因?yàn)槲业哪攴菔?-19.
3 回答

至尊寶的傳說(shuō)
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
時(shí)間
Basil Bourque 的出色回答已經(jīng)為您的問(wèn)題提供了最佳解決方案。我不重復(fù)。如果使用該答案,您希望在第一個(gè)示例中接受 1 位數(shù)字月份02/1/2018
,則您應(yīng)該M
在格式模式字符串中只提供一個(gè)。然后這兩個(gè)1
和01
將被接受。同樣,一個(gè)人d
將同時(shí)接受2
和02
月份的某一天。
你的代碼出了什么問(wèn)題
SimpleDateFormat
從您的字符串中讀取盡可能多的內(nèi)容以匹配格式模式,但很高興不閱讀所有內(nèi)容。對(duì)于您的第二個(gè)示例,22/02/2-19
它解析22/02/2
為Date
2016 年多年前的 Mon Jan 02 00:00:00 CET 2(確切結(jié)果取決于您的時(shí)區(qū))。由于這是一個(gè)有效日期,因此不會(huì)引發(fā)任何異常。然后它會(huì)忽略字符串的最后三個(gè)字符。
添加回答
舉報(bào)
0/150
提交
取消