1. Java / Говнокод #9107

    +65

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    for (...) {
      Comparator<Date> date_comparator = new Comparator<Date>() {
        @Override
        public int compare(Date s1, Date s2) {
          long n1 = s1.getTime();
          long n2 = s2.getTime();
          if (n1 < n2)
            return -1;
          else if (n1 > n2)
            return 1;
          else
            return 0;
        }
      };
      Date beforeSaveDate = (Date) beforeSaveParam.getValue();
      beforeSaveDate.setSeconds(0);
      Date toSaveDate = (Date) toSaveParam.getValue();
      comparedValue = date_comparator.compare(beforeSaveDate, toSaveDate);
    }

    Задача была сравнить две даты, игнорируя при этом секунды.

    Запостил: LexeY4eg, 13 Января 2012

    Комментарии (4) RSS

    • интересно, те кто минусуют также пишут? :)
      Ответить
    • Инициализация по определению неизменяемого компаратора на каждой итерации? Пять баллов! Сравнение тоже доставляет, но это скорее в довесок.
      Ответить
      • тут ещё одна фишка есть. когда я спросил у кодера почему он сделал компаратор а не просто написал beforeSaveDate.compareTo(toSaveDate) раз уж он заюзал deprecated метод setSeconds(). Он ответил, что Date.compareTo сравнивает ещё и милисекунды, а как их занулить он не знал :)
        В данной ситуации можно было заюзать хотябы апачевские DateUtils.truncate и сократить обьем кода до 3-х строк:
        Date beforeSaveDate = (Date) beforeSaveParam.getValue();
        Date toSaveDate = (Date) toSaveParam.getValue();
        DateUtils.truncate(beforeSaveDate, Calendar.MINUTE).compareTo(toSaveDate)
        Ответить

    Добавить комментарий