检查当前日期是否小于到期日期

t3psigkw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(419)

这个问题在这里已经有答案了

如何比较localdate示例java 8(3个答案)
将日期解析为long时出现数字格式异常(3个答案)
两年前关门了。
在打开软件之前,我想检查系统日期(例如当前日期)是否早于到期日期。
我已经编写了以下代码,但是它抛出 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();
        }
    }
}
ie3xauqp

ie3xauqp1#

为什么会这样? Integer.parseInt 很适合解析像这样的字符串 42 变成一个 int . 您正在尝试解析一个字符串,如 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 , DateFormat 以及 SimpleDateFormat . 他们早已过时,最后两个特别是以麻烦著称。改用java.time,现代的java日期和时间api。
link:the java™ 教程:轨迹:日期时间

相关问题