Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中读取日期内获取异常_Java_Date_Exception - Fatal编程技术网

在java中读取日期内获取异常

在java中读取日期内获取异常,java,date,exception,Java,Date,Exception,我正在解决一个问题,给定初始日期和最终日期,返回它们之间的天数 我刚刚完成,我的答案似乎是正确的,但它说,在一些输入,我的阅读方法失败了,它抛出了一个例外 以下是我读取日期并将其解析为整数的代码: String si = in.nextLine(); String sf = in.nextLine(); int di = Integer.parseInt(si.substring(0, 2)); int mi = Integer.parseInt(si.sub

我正在解决一个问题,给定初始日期和最终日期,返回它们之间的天数

我刚刚完成,我的答案似乎是正确的,但它说,在一些输入,我的阅读方法失败了,它抛出了一个例外

以下是我读取日期并将其解析为整数的代码:

    String si = in.nextLine();
    String sf = in.nextLine();

    int di = Integer.parseInt(si.substring(0, 2)); 
    int mi = Integer.parseInt(si.substring(3, 5));
    int ai = Integer.parseInt(si.substring(6, si.length()));

    int df = Integer.parseInt(sf.substring(0, 2)); 
    int mf = Integer.parseInt(sf.substring(3, 5));
    int af = Integer.parseInt(sf.substring(6, sf.length()));
日期以XX/XX/XXXX格式给出(为了安全起见,我使用s.length读取年份以涵盖9999年的案例)


这段代码中有什么东西会在以这种格式读取年份时引发异常?

以下代码片段将很好地工作:

    try {

        System.out.println("Entered Dates::\n");
        Scanner in = new Scanner(System.in);

        String si = in.nextLine();

        if (Pattern.matches("\\d\\d/\\d\\d/\\d\\d\\d\\d", si)) {
            int di = Integer.parseInt(si.substring(0, 2));
            int mi = Integer.parseInt(si.substring(3, 5));
            int ai = Integer.parseInt(si.substring(6, si.length()));
            System.out.println("1st Date Accepted : " + di + "-" + mi + "-" + ai);
        }else{
            System.out.println("Entered 1st Date incorrect");
        }

        String sf = in.nextLine();
        if (Pattern.matches("\\d\\d/\\d\\d/\\d\\d\\d\\d", sf)) {
            int df = Integer.parseInt(sf.substring(0, 2));
            int mf = Integer.parseInt(sf.substring(3, 5));
            int af = Integer.parseInt(sf.substring(6, sf.length()));
            System.out.println("2nd Date Accepted : " + df + "-" + mf + "-" + af);
        }else{
            System.out.println("Entered 2nd Date incorrect");
        }


    } catch (Exception e) {
        System.out.println("Exception occurred: " + e);
    }

可以对任何少于7个字符的行抛出一个
异常
,以及si.substring()或sf.substring()。。。我只是发送代码,但无法访问输入测试。但我解决了在字符“/”之前、之间和之后查找数字的问题。“\\d\\d/\\d/\\d/\\d\\d\\d”是从命令行访问日期的模式。参考