无效的LocalDate日期引发错误

时间:2018-04-03 21:45:48

标签: java

我最近开始在Java中使用util.Date,但只是为了了解你无法添加/减去天数,所以我现在开始使用LocalDate。

我有一个网络应用,允许用户在&#dd / MM / yyyy'中输入日期。格式,它需要转换为' yyyy-MM-dd'。如果输入的日期不存在,应用程序还需要抛出错误。

以下是我正在使用的测试应用程序。它有效,但错误地允许日期如' 31/02 2018'。我尝试添加' .withResolverStyle(ResolverStyle.STRICT)',但我得到了不同的错误。

package javaapplication1;

import java.text.ParseException;
import java.time.format.DateTimeFormatter;
import java.time.LocalDate;
import java.time.format.ResolverStyle;

public class JavaApplication1 {

    public static void main(String[] args) {

        LocalDate today = LocalDate.now();

        LocalDate date;

        try {
            String strDate = "31/2/09"; // Input from user
            System.out.println("Form: " + strDate);

            date = setDate(strDate, "d/M/yy");

            System.out.println("Data: " + convertDateToString(date, "yyyy-MM-dd")); // Convert format for insertting into database

            // If date is older than 1 year, output message
            if (date.isBefore(today.minusYears(1))) {
                System.out.println("Date is over a year old");
            }

            // If date is older than 30 days, output message
            if (date.isBefore(today.minusDays(30))) {
                System.out.println("Date is over 30 days old");
            }
        }
        catch (ParseException e) {
            System.out.println("Invalid date!");
            e.printStackTrace();
        }
    }

    private static LocalDate setDate(String strDate, String dateFormat) throws ParseException {

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat).withResolverStyle(ResolverStyle.STRICT);

        //sdf.setLenient(false);

        LocalDate date = LocalDate.parse(strDate, dtf);

        return date;
    }

    private static String convertDateToString(LocalDate date, String dateFormat) {

        //DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat);

        String strDate = date.toString();

        return strDate;
    }
}

1 个答案:

答案 0 :(得分:0)

使用DateTimeParseExeption修复了问题。

使用' uuuu'而不是' yyyy'表示年份是ResolverStyle.STRICT工作所必需的。