java - 检查当前日期是否小于到期日期
问题描述
我想在打开我的软件之前检查系统日期(例如当前日期)是否在到期日期之前。
我编写了以下代码,但是它抛出了一个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();
}
}
}
解决方案
为什么会发生这种情况?
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
_ 它们已经过时了,尤其是最后两个是出了名的麻烦。请改用现代 Java 日期和时间 API java.time。DateFormat
SimpleDateFormat
链接: Java™ 教程:线索:日期时间
推荐阅读
- python - 绘制带有条件 Y 轴的回归图
- reactjs - 反应导航5徽章未呈现
- javascript - 如果我们在 Angular 应用程序中有多个模块,我们是否需要一次又一次地加载权限?
- python - 什么是 Kivy 颜色代码以及它们如何工作?
- git - 执行 git-filter-repo 后创建新存储库的最佳方法
- netbeans - MacOS Big Sur + Netbeans:无法打开/创建项目
- import - 自定义 GA 数据成本 = 缺少 Analytics API 列?
- python - Cloud Function 为 bigquery 客户端抛出错误类型错误,但在 Jupyter Notebook 上工作正常
- javascript - 窗口加载和点击事件
- c# - 例如,C# 为什么我不能将字符串从 networkstream 解析为 int?TCP客户端.服务器