public class Solution {
public static void main(String[] args) {
System.out.println(isDateOdd("JANUARY 1 2000"));
}
public static boolean isDateOdd(String date) {
Date yearStartTime = new Date();
Date currentTime = new Date(date);
yearStartTime.setSeconds(0);
yearStartTime.setMinutes(0);
yearStartTime.setHours(0);
yearStartTime.setDate(1);
yearStartTime.setMonth(0);
yearStartTime.setYear(currentTime.getYear());
long msTimeDistancce = currentTime.getTime() - yearStartTime.getTime();
long msDay = 24 * 60 * 60 * 1000;
int countDay = (int) (msTimeDistancce/msDay);
if(countDay % 2 != 0)
return true;
else
return false;
}
}
JANUARY 1 2000 = true - данное решение выводит false
JANUARY 2 2020 = false - данное решение также выводит false grig_by
18 уровень
Решил задачу, но валидатор не пропускает. Взял чужое решение, валидатор пропустил - но работает не правильно.
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
АлександрExpert
14 августа 2019, 16:13
В чем вопрос?
Почему пропустил? Значит тесты которые дает валидатор, это решение проходит.
Почему не правильно работает? Ну тут с датой я особо не помогу, но посмотрев, что делает код, его легко исправить чтобы работал.
Вроде так работает.
Некорректно работает сейчас т.к. установленная в ручную дата, при переводе в миллисекунды не равна считанной со строки. Там всегда небольшая разница. Тут уже начинаются проблемы с математикой. Результат деления получается дробный, а в интах дробная часть всегда отбрасывается. Соответственно получаем значение на 1 меньше. Либо устанавливать дату считанную со строки как я написал, либо использовать другие типы данных и методы округления. 0
grig_by эксперт в копи пасте
14 августа 2019, 16:45
или я чего-то не понимаю, но как может помочь?
0
АлександрExpert
15 августа 2019, 09:38
Этот код подразумевает, что 1 января 2000 года (currentTime) и установленный на начала года (yearStartTime) должны быть равны, но этого не проиходит, т.к. yearStartTime будет отличатся на какое-то кол-во миллисекунд (currentTime.getTime() - yearStartTime.getTime() != 0).
Чтобы этой ситуации избежать, мы инициируем дату как я указал, тогда они будут равны, а если указать другую даты, потом мы устанавливаем день и месяц на 1 и 0 соответственно (остальное часы, минуты, секунды и год уже можно не устанавливать в данном случае).
В результате у нас получается верная разница, но нужно поменять условие т.к. 1 января и 1 января равны и вернут 0 мс как разницу. 0 % 2 == 0 и текущее условие выдаст ложь.
+2