这个问题在这里已经有答案了:
如何比较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();
}
}
}
1条答案
按热度按时间ie3xauqp1#
为什么会这样?
Integer.parseInt
很适合解析像这样的字符串42
变成一个int
. 您正在尝试解析一个字符串,如17/09/2018
用那种方法。您的字符串不代表有效的int
因此parseInt
方法抛出NumberFormatException
.那该怎么办呢?
使用
LocalDate
代表一个日期和它的isBefore
(或isAfter
)与另一个日期比较。请注意,与问题中的代码相比,它要简单得多。在这种情况下,您不需要格式化或解析。我使用jvm的时区设置来获取今天的日期(您在问题中也这样做了)。因此,用户可能会通过更改时区来将过期时间提前几个小时。如果要避免这种情况,还可以对时区进行硬编码,例如
ZoneId.of("Asia/Ust-Nera")
如果你需要解析一个字符串19/09/2018
:此代码段输出:
有效期为2018-09-19
远离
Date
,DateFormat
以及SimpleDateFormat
. 他们早已过时,最后两个特别是以麻烦著称。改用java.time,现代的java日期和时间api。link:the java™ 教程:轨迹:日期时间