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

    +83

    1. 1
    2. 2
    3. 3
    4. 4
    while (today.before(endTrial)) {
    	today.add(Calendar.DAY_OF_MONTH, 1);
    	daysBetween++;
    }

    считаем разницу между двумя датами

    Запостил: wooddy, 02 Июля 2013

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

    • while (endTrial.after(new Date()) {
          Thread.sleep(86400000);
          daysBetween++;
      }
      Ответить
    • А как правильно? Делить разность timestamp'ов на 86400000?

      С месяцами, например, так не прокатит.
      Ответить
      • с месяцами не прокатит, а с днями - очень даже
        Ответить
        • как бы так сказать: с днями тоже херово катит :)
          Ответить
          • ничего не утаивай от нас
            Ответить
            • когда имеете дело с переходом на летнее время - делить нельзя
              Ответить
              • Если таймштампы в UTC - можно делить всегда. DST в таком случае будет скомпенсировано при переводе даты из местного времени в UTC.

                P.S. А вообще этим переводом часов испоганили всё летоисчисление. Один час в году вообще выпадает, а второй мапается на UTC'шное время два раза, создавая неоднозначную ситуацию при переводе. Собственно почему часы и переводят глубокой ночью - чтобы как можно меньше событий попадало в эти нехорошие интервалы, и люди не мучались.
                Ответить
                • ключевое слово "если". По идее катит любая зона в которой нет перехода не летнее время
                  Ответить
                  • > По идее катит любая зона в которой нет перехода не летнее время
                    Только если вы возьмете с правительства страны, к которой относится эта зона, расписку о том, что она не станет вводить DST ближайшие 20-30 лет ;)

                    UPD: И убедитесь в том, что эта страна раньше не вводила DST, иначе на старых датах будет баговать.

                    P.S. Если уж на то пошло - есть еще такая херня как leap second, которая внесет еще немного погрешности ;)
                    Ответить
                    • ввели бы календарь Медлера, и не было бы никаких leap second
                      Ответить
                    • Есть не просто страна - целый континент. Еще там нет никаких проблем с летним временем.
                      В обширном центре время считается (в том числе) как UTC+0.
                      Ответить
                      • Антарктида? Кстати да, а на Южном Полюсе, да и вообще у полярников - какой часовой пояс на часах стоит, если стоя в районе полюса достаточно пройти несколько шагов, чтоб оказаться в противоположном.
                        Ответить
                        • Какой угодно, в этом вся прелесть. Несколько зон со своим поясным временем существуют, но деление довольно условно.
                          Ответить
      • > А как правильно?
        Библиотеку подключить, не-а?
        Хотя java же.. ну тогда фреймворк -> он предоставит фабрику -> она нагенерит объект-дату -> у него будет метод "разница"
        Ответить
    • есть еще вариант:

      в каждой дате установить время 00:00, взять разницу timestamp'ов, ее разделить на 86400000f, и округлить до ближайшего целого.
      Ответить
      • Use JodaTime, Luke...

        Days.daysBetween(d1, d2);
        Ответить
        • наконец, йода поселился в 8ой жабе
          Ответить
          • Релиз в следующем году? Лол.
            Ответить
            • да, не прошло и 10 лет
              Ответить
              • Совсем некуда спешить. Там замыкания будут, говорите?
                Ответить
                • Пока восьмая жаба дойдёт до продакшена, ждущие замыканий состарятся и умрут.
                  Ответить
                  • В 2014 обещали выпустить, не?
                    Ответить
                    • И что? Третий питон вон тоже довольно давно вышел, когда он стал активно использоваться в продакшене?
                      Ответить
                      • Пардон, но замыкания в питоне были искаропки. Яву корректнее сравнивать с сишарпом... ну ты понел?
                        Ответить
                        • Да что ты зациклился на этих замыканиях? Я о том, что между выходом новой версии любого языка и попаданием её в продакшен может пройти N лет, особенно, если ломается обратная совместимость.
                          Ответить
                          • Сравнение некорректно - ява обратно совместима. Вся идеология явы построена на обратной совместимости, лучше 10 лет ничего не менять, лишь бы все работало.
                            Ответить
            • Как время летит, а. Я вроде только недавно сырцы 7-ой дочитал...
              Ответить
          • Нет, там JSR-310. Но архитектурнее он ещё правильнее Жоды.
            Ответить
        • это был вариант для тех кто не хочет подключать Йоду :)
          Ответить
    • Хотя место ещё было, но его дружки всё равно сели в другом месте, о чём-то очень тихо перешёптываясь.
      Ответить

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