Сравните между разным временем и отображением сообщения об ошибке Android - PullRequest
0 голосов
/ 12 сентября 2018

В основном я потратил 1 день только на то, чтобы сравнить два раза, но до сих пор ничего не стоилоЯ в основном пытаюсь сравнить между двумя разными временами, которые я хочу, чтобы избежать сохранения идентификатора данных в первый раз меньше, чем во второй раз, но я не смог.Кроме того, равная часть работает плавно, но вторая часть не работает

@Override
        public void onTimeSet(int id, TimePicker view, int hourOfDay, int minute) throws ParseException {
            String AM_PM = " AM";
            String pattern = "HH:mm";
            SimpleDateFormat format = new SimpleDateFormat(pattern);

            String mm_precede = "";
            if (hourOfDay >= 12) {
                AM_PM = " PM";
                if (hourOfDay >=13 && hourOfDay < 24) {
                    hourOfDay -= 12;
                }
                else {
                    hourOfDay = 12;
                }
            } else if (hourOfDay == 0) {
                hourOfDay = 12;
            }
            if (minute < 10) {
                mm_precede = "0";
            }

     if (id == 1 && id ==2) {
         Date date1 = format.parse(sTimeApp.getText().toString());
         Date date2 = format.parse(eTimeApp.getText().toString());
         DateTime da1 = new DateTime(date1);
         DateTime da2 = new DateTime(date2);
         System.out.println("Date" + date1);
         System.out.println("Date" + date1);
         if (da1.equals(da2) ){
             Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
             return;
         }else if (da1.isBefore(da2)){
             Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
             return;
         }

     }


    //        if (sTimeApp.equals(eTimeApp) ) {
    //            Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
    //            return;
    //        }

            if (id == 1) {
                if (minute <= 9) {
                    sTimeApp.setText(hourOfDay + ":" +  mm_precede + minute + AM_PM);
                } else {

                    sTimeApp.setText(hourOfDay + ":" + mm_precede + minute + AM_PM);
                }
            } else if (id == 2) {
                if (minute <= 9) {
                    eTimeApp.setText(hourOfDay + ":" +  mm_precede + minute + AM_PM);
                } else {
                    eTimeApp.setText(hourOfDay + ":" + mm_precede + minute + AM_PM);
                }
            }

        }
    }

1 Ответ

0 голосов
/ 12 сентября 2018

java.time

Я думаю, вы ищете что-то вроде этого:

static DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);

@Override
public void onTimeSet(int id, TimePicker view, int hourOfDay, int minute) {
    if (id == 1 || id == 2) {
        LocalTime start = LocalTime.parse(sTimeApp.getText(), timeFormatter);
        LocalTime end = LocalTime.parse(eTimeApp.getText(), timeFormatter);
        if (start.equals(end)) {
            Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
            return;
        } else if (end.isBefore(start)) {
            Toast.makeText(this, "Error , Time should not be before ", Toast.LENGTH_SHORT).show();
            return;
        }

        LocalTime newTime = LocalTime.of(hourOfDay, minute);
        String formattedTime = newTime.format(timeFormatter);
        if (id == 1) {
            sTimeApp.setText(formattedTime);
        } else {
            assert id == 2 : id;
            eTimeApp.setText(formattedTime);
        }
    }
}

Если вы уже используете Joda-Time, вы можете не захотеть обновляться до java.time прямо сейчас. У Joda-Time тоже есть класс LocalTime, который вы можете использовать так же, как я использую org.threeten.bp.LocalTime в приведенном выше.

Я не уверен, хотели ли вы также сравнить время, установленное с помощью средства выбора времени, с временем начала или окончания, уже указанным в sTimeApp или eTimeApp. Я не представил такого сравнения.

Что пошло не так в вашем коде?

  • id == 1 && id ==2 не может быть правдой. В моем коде я предложил id == 1 || id == 2, но, пожалуйста, проверьте, что вы хотите.
  • Я подозреваю, что вы сравнили неправильно. Когда я читаю ваш код, вы выдаете сообщение об ошибке, если время начала раньше времени окончания, что я бы назвал нормальной и правильной ситуацией. В моем коде я вместо этого выдаю сообщение об ошибке, если время окончания предшествует времени начала.
  • Вы, кажется, вручную форматируете время для отображения. Это слишком сложный способ. Вместо этого я использую DateTimeFormatter для форматирования времени (опять же, Joda-Time имеет аналогичную функциональность).
  • Вы используете устаревшие SimpleDateFormat и Date классы. Вместо этого я рекомендую вам использовать java.time, современный Java API даты и времени. Если вы уже используете Joda-Time, это тоже хороший вариант. В обоих случаях полностью избегайте упомянутых устаревших классов, поскольку Joda-Time или java.time предлагают все необходимые вам функции.

Вопрос: Могу ли я использовать java.time на Android?

Да, java.time прекрасно работает на старых и новых устройствах Android. Просто требуется хотя бы Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (от 26 уровня API, как мне сказали) современный API поставляется встроенным.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

...