JAVA — если условие не работает должным образом над параметром

#java #date #calendar #simpledateformat #date-format

#java #Дата #Календарь #simpledateformat #дата-формат

Вопрос:

Я пытаюсь создать кнопку отправки, которая сохраняет пользовательский ввод при нажатии, и у меня возникла проблема с частью условия 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);
}
  

Комментарии:

1. Я рекомендую вам не использовать Timestamp , SimpleDateFormat и Date . Эти классы плохо спроектированы и давно устарели, SimpleDateFormat в частности, заведомо неприятны. Вместо этого используйте LocalTime and / или другие классы из java.time, современного Java date и time API .

Ответ №1:

У вас есть строка DateFormat.parse(«10:00»).

Это фактически анализирует дату как 1 января 1970 года. Итак, если вы сравните его с текущим временем, оно всегда будет после. Именно по этой причине ваше условие if всегда истинно.

Вместо этого вы можете получить текущее время, используя приведенный ниже код.

 Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY); //hour is in 24 hour format.
  

Вы можете использовать это значение, чтобы сравнить его с вашим 10:00 (10, если AM. 22, если PM) часовым пределом. Перед сравнением убедитесь, что вы конвертируете в 24-часовой формат.

Итак, это было бы что-то вроде

 if(hour > 22){
  // Too late
}else{
  // Not late
}
  

Комментарии:

1. Спасибо, что оно работает сейчас, но как добавить минуты в условие. Например, я меняю позднее время на 10:35?

2. Вы могли бы использовать тот же метод. Используйте календарь. МИНУТА и получите текущую минуту.

3. Хорошо, еще раз спасибо за вашу помощь!

4. @Octavio — Вы можете избавиться от всех подобных подверженных ошибкам сложностей и накладных расходов, используя современный API даты и времени ( java.time API), предложенный Ole V.V. Я настоятельно рекомендую вам последовать его совету.

5. Хорошо, я попробую. Спасибо!

Ответ №2:

java.time

Я рекомендую вам использовать java.time, современный Java date и time 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 в моем часовом поясе) я получил этот вывод:

Поздно

LocalTime это время суток без даты (и без часового пояса или смещения UTC). Это происходит с 00:00 до 23:59:59.999999999. Таким образом, каждый раз с 00:00 до 10:00 будет считаться своевременным, а все остальное время суток — поздним.

Ссылки

Комментарии:

1. Я тоже попробую это. Спасибо!