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

    +78

    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
    20. 20
    21. 21
    22. 22
    private int compareDates(java.sql.Date date1, java.sql.Date date2) {
    
    if (date1.getYear() < date2.getYear())
    return 1;
    
    if (date1.getYear() > date2.getYear())
    return -1;
     
    if (date1.getMonth() < date2.getMonth())
    return 1;
    
    if (date1.getMonth() > date2.getMonth())
    return -1;
     
    if (date1.getDate() < date2.getDate())
    return 1;
    
    if (date1.getDate() > date2.getDate())
    return -1;
     
    return 0;
    }

    Сравнение двух дат

    Запостил: iboken, 10 Декабря 2013

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

    • угу, про int compareTo(Date anotherDate) автор не знал
      Ответить
      • какая всё же красота без перегрузки операторов
        не то что в других языках, переполненных x-100-проблемами
        Ответить
        • ага, когда падает, если первый оператор нуллевой, но второй нет, а если поменять местами операнды, то все ок.
          красота, ассоциативность, хули.
          Ответить
      • Может автора сподвиг на написание тот факт, что это SQL Date? Может оно не так сравниться, как нужно? (Документация говорит, что compareTo он не перегружает.)
        Ответить
        • А реализация интерфейса Comparable<Date> не помогает разве?
          http://docs.oracle.com/javase/6/docs/api/java/sql/Date.html
          Ответить
          • В теории - да, а на практике - хз. Например, один из классов вместо вернуть значение из каких-нибудь методов использующихся для сравнения бросить исключение. Или, даже такой вариант: один из классов из getMonth возвращает месяц, а другой - день. Конечно, маловероятно, но не невозможно.

            Кроме того, на сколько я понимаю, реализация этого интерфейса не предотвращает ситуации когда SQL Date будет сравниваться с utils Date. А автору, судя по всему, этого не хотелось.
            Ответить
        • > Документация говорит, что compareTo он не перегружает.
          все равно сравнение делается по миллисекундам, так что без паники.
          Ответить
          • Нахрена, кстати, они сделали отдельный java.sql.Date? Только ради немного других toString() и valueOf()?

            И почему нет java.sql.Integer и т.п.? :)
            Ответить
            • да-да, чтобы записывать в базу в походящем для нее формате, этой функциональности и не должно быть в java.util.Date.
              а остальные типы и так неплохо дружат с БД
              Ответить
    • Сравнение адресов дат? Вот оно пересечение пространства и времени!
      Ответить
    • Странно. Даты, но не пых. :)
      Ответить

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