JAVA - 如果条件在参数上不能正常工作
JAVA - if condition not working properly on parameter
我正在尝试创建一个提交按钮,在单击该按钮时保存用户输入,但我在 if 条件部分遇到了问题。我想要发生的是当用户在 10:00 点钟(基于系统时间)之后单击按钮时,数据库报告将是“迟到”,否则报告将是“未迟到”。但每次我点击按钮时,即使系统时间早于 10:00,它总是说“迟到”。如何解决这个问题?
代码:
try {
String sql = "INSERT INTO studentregisterlogin" + "(SSN, TimeIn, TimeOut, Report)" + "VALUES (?,?,?,?)";
con = DriverManager.getConnection("jdbc:mysql://localhost/studentlogin", "root", "");
pst = con.prepareStatement(sql);
pst.setString(1, tfSerialNumber.getText());
pst.setTimestamp(2, new Timestamp(System.currentTimeMillis()));
pst.setString(3, " ");
// My Problem is this Condition
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
Date date = new Date(System.currentTimeMillis());
try {
if (date.after(dateFormat.parse("10:00"))) {
pst.setString(4, "Late");
} else if (date.before(dateFormat.parse("10:00"))){
pst.setString(4, "NotLate");
}
} catch (ParseException ex) {
Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
}
pst.executeUpdate();
//updateTable();
} catch (SQLException | HeadlessException ex) {
JOptionPane.showMessageDialog(null, ex);
}
您有行 dateFormat.parse("10:00").
这实际上将日期解析为 1970 年 1 月 1 日。所以,如果你将它与当前时间进行比较,它总是会晚于。这就是您的 if 条件始终为真的原因。
相反,您可以使用以下代码获取当前时间。
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY); //hour is in 24 hour format.
您可以使用此值将其与您的 10:00(上午为 10。下午为 22)时钟限制进行比较。请确保在比较之前转换为 24 小时格式。
所以,它会是这样的
if(hour > 22){
// Too late
}else{
// Not late
}
java.time
我建议您使用 java.time,现代 Java 日期和时间 API,作为您的日期和时间工作。
如果你确定日期相同,只需要比较一天中的时间,下面就是你需要的。让我们首先声明一个常量来保持你的上午 10 点的阈值:
private static final LocalTime DUE_TIME = LocalTime.of(10, 0);
现在进行比较:
LocalTime now = LocalTime.now(ZoneId.systemDefault());
if (now.isAfter(DUE_TIME)) {
System.out.println("Late");
} else {
System.out.println("On time");
}
刚才运行时(我的时区是12:42),我得到了这个输出:
Late
LocalTime
是一天中没有日期的时间(也没有时区或 UTC 偏移量)。它从 00:00 到 23:59:59.999999999。因此,从 00:00 到 10:00 的每一次都将被视为准时,而一天中的所有其他时间都将被视为迟到。
链接
- Oracle tutorial: Date Time 解释如何使用 java.time。
我正在尝试创建一个提交按钮,在单击该按钮时保存用户输入,但我在 if 条件部分遇到了问题。我想要发生的是当用户在 10:00 点钟(基于系统时间)之后单击按钮时,数据库报告将是“迟到”,否则报告将是“未迟到”。但每次我点击按钮时,即使系统时间早于 10:00,它总是说“迟到”。如何解决这个问题?
代码:
try {
String sql = "INSERT INTO studentregisterlogin" + "(SSN, TimeIn, TimeOut, Report)" + "VALUES (?,?,?,?)";
con = DriverManager.getConnection("jdbc:mysql://localhost/studentlogin", "root", "");
pst = con.prepareStatement(sql);
pst.setString(1, tfSerialNumber.getText());
pst.setTimestamp(2, new Timestamp(System.currentTimeMillis()));
pst.setString(3, " ");
// My Problem is this Condition
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
Date date = new Date(System.currentTimeMillis());
try {
if (date.after(dateFormat.parse("10:00"))) {
pst.setString(4, "Late");
} else if (date.before(dateFormat.parse("10:00"))){
pst.setString(4, "NotLate");
}
} catch (ParseException ex) {
Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
}
pst.executeUpdate();
//updateTable();
} catch (SQLException | HeadlessException ex) {
JOptionPane.showMessageDialog(null, ex);
}
您有行 dateFormat.parse("10:00").
这实际上将日期解析为 1970 年 1 月 1 日。所以,如果你将它与当前时间进行比较,它总是会晚于。这就是您的 if 条件始终为真的原因。
相反,您可以使用以下代码获取当前时间。
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY); //hour is in 24 hour format.
您可以使用此值将其与您的 10:00(上午为 10。下午为 22)时钟限制进行比较。请确保在比较之前转换为 24 小时格式。
所以,它会是这样的
if(hour > 22){
// Too late
}else{
// Not late
}
java.time
我建议您使用 java.time,现代 Java 日期和时间 API,作为您的日期和时间工作。
如果你确定日期相同,只需要比较一天中的时间,下面就是你需要的。让我们首先声明一个常量来保持你的上午 10 点的阈值:
private static final LocalTime DUE_TIME = LocalTime.of(10, 0);
现在进行比较:
LocalTime now = LocalTime.now(ZoneId.systemDefault());
if (now.isAfter(DUE_TIME)) {
System.out.println("Late");
} else {
System.out.println("On time");
}
刚才运行时(我的时区是12:42),我得到了这个输出:
Late
LocalTime
是一天中没有日期的时间(也没有时区或 UTC 偏移量)。它从 00:00 到 23:59:59.999999999。因此,从 00:00 到 10:00 的每一次都将被视为准时,而一天中的所有其他时间都将被视为迟到。
链接
- Oracle tutorial: Date Time 解释如何使用 java.time。