首页 > 解决方案 > 检查当前日期是否小于到期日期

问题描述

我想在打开我的软件之前检查系统日期(例如当前日期)是否在到期日期之前。

我编写了以下代码,但是它抛出了一个NumberFormatException. 为什么会发生这种情况?

public class dateController implements Initializable {

    @FXML Label lblDate;

    Alert alert = new Alert(AlertType.INFORMATION);

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();

        lblDate.setText(dateFormat.format(date));

        String a ="19/09/2018";

        String currentdate = lblDate.getText();

        String LastRunDate = currentdate;

        if(Integer.parseInt(currentdate) < Integer.parseInt(a)) {
            alert.setHeaderText(null);             
            alert.setContentText("Successfull");
            alert.show();
        }
    }
}

标签: javamysqldatejavafxdate-comparison

解决方案


为什么会发生这种情况?

Integer.parseInt可以将字符串解析42int. 您正在尝试17/09/2018使用该方法解析字符串。您的字符串不代表有效值int(坦率地说,我不知道您期望从中得出哪个整数?)因此该parseInt方法会抛出NumberFormatException.

那该怎么办呢?

用于LocalDate表示日期及其isBefore(或isAfter)与另一个日期进行比较。

    LocalDate expirationDate = LocalDate.of(2018, Month.SEPTEMBER, 19);
    LocalDate today = LocalDate.now(ZoneId.systemDefault());
    if (today.isBefore(expirationDate)) {
        alert.setHeaderText(null);             
        alert.setContentText("Successful");
        alert.show();
    }

请注意,与问题中的代码相比,它要简单得多。在这种情况下,您不需要格式化或解析。我正在使用 JVM 的时区设置来获取今天的日期(您在问题中也这样做了)。因此,用户可能会通过更改时区将过期时间推迟几个小时。如果你想避免它,你也可以硬编码时区,例如ZoneId.of("Asia/Ust-Nera")

如果您确实需要解析如下字符串19/09/2018

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("dd/MM/uuuu");
    String a ="19/09/2018";
    LocalDate expirationDate = LocalDate.parse(a, dateFormatter);

    System.out.println("Expiration date is " + expirationDate);

此代码段输出:

截止日期为 2018-09-19

远离和。Date_ 它们已经过时了,尤其是最后两个是出了名的麻烦。请改用现代 Java 日期和时间 API java.time。DateFormatSimpleDateFormat

链接: Java™ 教程:线索:日期时间


推荐阅读