Какой оператор следует использовать для сравнения двух значений LocalDate? - PullRequest
0 голосов
/ 07 мая 2019

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

Flight flight = new Flight();
System.out.println("Give the day of the departure.");
LocalDate day = LocalDate.of(2019, Month.MAY, scanner.nextInt());
flight.setDateOfDeparture(day);
boolean theDay = true; //Flag (reversed way in order to achieve the TRUE logic value).

for (Flight flight1 : flightList) {
    if (flight1.getDateOfDeparture() == (flight.getDateOfDeparture())) {
           theDay = false;
     }
}

if (theDay) {
    // Some logic...
}

Я пробовал также ключевое слово равно.но снова цикл for игнорирует сравнение.

for (Flight flight1 : flightList) {
   if (flight1.getDateOfDeparture().equals(flight.getDateOfDeparture())) {
        theDay = false;
   }
}

После ваших ответов я попробовал многие из предложенных вами решений.Чтобы проверить, попадает ли компилятор в цикл for, я помещаю сообщение печати переменной, которая никогда не видна моей консоли.

for (Flight flight1 : flightList) {
   System.out.println(flight1.getDateOfDeparture());
   if(flight1.getDateOfDeparture().compareTo(flight.getDateOfDeparture())==0) {
      theDay = false;
    }
}

Ответы [ 4 ]

4 голосов
/ 07 мая 2019

Вы можете использовать следующие методы в соответствии с вашими потребностями

    LocalDate oldDate = LocalDate.of(2019,3,31);
    LocalDate newDate = LocalDate.of(2019,4, 1);
    System.out.println(oldDate.isAfter(newDate));
    System.out.println(oldDate.isBefore(newDate));
    System.out.println(oldDate.isEqual(newDate));
    System.out.println(oldDate.compareTo(newDate));

Это вернет

false
true
false
-2
2 голосов
/ 07 мая 2019

Для сравнения двух локальных дат вы можете использовать метод «CompareTo ()».Следуйте примеру кода

   import java.time.LocalDate;

public class Example {
   public static void main(String[] args) {
      /* Comparing the Dates given in String format
       * First the given strings are parsed in the LocalDate
       * and then compared against each other using compareTo()
       */
      LocalDate date1 = LocalDate.parse("2017-06-22");
      System.out.println(date1);  
      LocalDate date2 = LocalDate.parse("2017-06-22");
      System.out.println(date2);  
      System.out.println(date2.compareTo(date1)); 

      /* Comparing the Dates with the given year, month and
       * day information. The given data is passed in the of() method
       * of LocalDate to create instances of LocalDate and then compared
       * using the compareTo() method.
       * 
       */
      LocalDate date3 = LocalDate.of(2017, 06, 22);
      System.out.println(date3);  
      LocalDate date4 = LocalDate.of(2017, 10, 26);
      System.out.println(date4);  
      System.out.println(date4.compareTo(date3));

      /* Given Date is compared with the current Date
       */
      LocalDate date5 = LocalDate.now();
      System.out.println(date5);
      LocalDate date6 = LocalDate.of(2016, 02, 10);
      System.out.println(date6);
      System.out.println(date6.compareTo(date5));
   }
}

Ваш вывод

2017-06-22
2017-06-22
0
2017-06-22
2017-10-26
4
2017-10-28
2016-02-10
-1
1 голос
/ 07 мая 2019

Вы можете сравнить LocalDate s, используя метод compareTo или другие методы сравнения. Сделайте это так:

public static void main(String args[]) {
    LocalDate today = LocalDate.now();
    LocalDate yesterday = today.minusDays(1);
    LocalDate tomorrow = today.plusDays(1);

    int comparedToYesterday = today.compareTo(yesterday);
    int comparedToTomorrow = today.compareTo(tomorrow);
    int comparedToItself = today.compareTo(today);

    // using compareTo only
    System.out.println("Comparison to an earlier date results in: " + comparedToYesterday);
    System.out.println("Comparison to a later date results in: " + comparedToTomorrow);
    System.out.println("Comparison to the same date results in: " + comparedToItself);

    // using other comparison methods
    System.out.println("Is today after yesterday? Answer: " 
                        + (today.isAfter(yesterday) ? "yes" : "no"));
    System.out.println("Is today before tomorrow? Answer: "
                        + (today.isBefore(tomorrow) ? "yes" : "no"));
    System.out.println("Is today after today? Answer: "
                        + (today.isAfter(today) ? "yes" : "no"));
}
0 голосов
/ 07 мая 2019

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

for (Flight flight1 : flightList) {
    if (flight1.getDateOfDeparture().compareto(flight.getDateOfDeparture()) != 0)) {
           theDay = false;
     }
}
...