日期年份值在无效时显示有效

我正在开发一个日期应用程序,用户将在其中输入日期并且我正在验证该日期。日期格式为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.


千万里不及你
浏览 160回答 3
3回答

至尊宝的传说

时间Basil Bourque 的出色回答已经为您的问题提供了最佳解决方案。我不重复。如果使用该答案,您希望在第一个示例中接受 1 位数字月份02/1/2018,则您应该M在格式模式字符串中只提供一个。然后这两个1和01将被接受。同样,一个人d将同时接受2和02月份的某一天。你的代码出了什么问题SimpleDateFormat从您的字符串中读取尽可能多的内容以匹配格式模式,但很高兴不阅读所有内容。对于您的第二个示例,22/02/2-19它解析22/02/2为Date2016 年多年前的 Mon Jan 02 00:00:00 CET 2(确切结果取决于您的时区)。由于这是一个有效日期,因此不会引发任何异常。然后它会忽略字符串的最后三个字符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java