сижу уже несколько часов, а картинка совсем не складывается. Может быть кто-то подскажет...(((((
Задача: Работа с датой
1. Реализовать метод isDateOdd(String date) так, чтобы он возвращал true, если количество дней с начала года - нечетное число, иначе false
2. String date передается в формате FEBRUARY 1 2013
РЕШЕНИЕ:
public class Solution {
public static void main(String[] args) {
System.out.println(isDateOdd("MAY 1 2013"));
}
public static boolean isDateOdd(String date) {
return true;
}
DateFormat format = new SimpleDateFormat("MMMM d yyyy", Locale.ENGLISH);
Date yearStartTime = new Date();
yearStartTime.setHours(0); // ошибка
yearStartTime.setMinutes(0);// ошибка
yearStartTime.setSeconds(0);// ошибка
yearStartTime.setMonth(0);// ошибка
yearStartTime.setDay(1);// ошибка
Date currentTime = new Date();
currentTime =format.parse(date);// ошибка
long msTimeDistance = currentTime.getTime() - yearStartTime.getTime();
long msDay = 24 * 60 * 60 * 1000;
int dayCount = (int) (msTimeDistance / msDay);
if(dayCount % 2 == 0) {// ошибка
return false;
}
else
return true;
}
Polina
29 уровень
что-то я совсем в этой задаче застряла
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Polina
8 октября 2018, 23:21
исправила код, пробовала с разными вариантами, вроде все правильно выводит, а валидатор говорит, что не верно true и false. Опять где-то ошибка закралась... ААА.. Я плачу:))
public class Solution {
public static void main(String[] args) {
System.out.println(isDateOdd("JANUARY 2 2020"));
}
public static boolean isDateOdd(String date) {
DateFormat format = new SimpleDateFormat("MMMM d yyyy", Locale.ENGLISH);
Date yearStartTime = new Date();
yearStartTime.setHours(0);
yearStartTime.setMinutes(0);
yearStartTime.setSeconds(0);
yearStartTime.setMonth(0);
yearStartTime.setDate(1);
Date currentTime = new Date();
try {
currentTime = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long msTimeDistance = currentTime.getTime() - yearStartTime.getTime();
long msDay = 24 * 60 * 60 * 1000;
int dayCount = (int) (msTimeDistance / msDay);
if (dayCount % 2 != 0) {
return true;
} else
return false;
}
}
0
Стас Пасинков Software Developer в Zipy Master
9 октября 2018, 01:05решение
тогда еще раз смотрим сюда
после выполнения первой строки мы получаем 2:01 9/10/18 (на момент написания коммента)
затем обнуляем часы, минуты, секунды, месяц и день. получаем 0:00 1/01/18 это у нас хранится в переменной yearStartTime.
после чего мы парсим дату из строки, которую получили, допустим из вашего мейна 0:00 2/01/20 и сохраняем в переменную currentTime
еще раз
yearStartTime = 0:00 1/01/18
currentTime = 0:00 2/01/20
надеюсь, уже увидели свою ошибку. если нет - тогда могу сказать, что при таком вводе ваша программа еще около 2х лет будет работать неправильно :) +2
Igor
9 октября 2018, 01:29
Здравствуйте, Полина!
В условии вас просят чтобы метод isDateOdd(String date) возвращал true если количество дней с начала года нечётное.
Имеется ввиду, что 1-ое Января - это ноль дней. Потому что 1 число - начало года.
2-ое Января - это один дней с начала года так далее.
Если я правильно помню, в лекции рекомендуют ставить
что бы получить дату в строке с первым числом месяца, нулевого числа ведь не бывает. Потому и вы так здесь написали.
Но в данном задании вам нужно либо считать начало года с нуля дней, либо отнять первый день в этой строке:
(Об этом напоминается в условии: "Не забудьте учесть первый день года.") 0
Polina
9 октября 2018, 02:22
Вот спасибо, Cтас! Наконец-то я с Вашей помощью доколупала эту задачу. Нет симпатии у меня в классу Date:)
+1
Стас Пасинков Software Developer в Zipy Master
8 октября 2018, 22:32
ааа, кажется я понял почему ошибки))
тебе вот это вот все надо написать ВНУТРИ метода isDateOdd(), а не после него))
0
Polina
8 октября 2018, 23:19
да, уж.. Я себе всю голову сломала, разными способами пробовала. Действительно не туда весь код вставила:) Руки себе надо оторвать:))) Переделала, подправила, но все равно не принимает, ругается на то, что не верно true и false выдает.
0
Стас Пасинков Software Developer в Zipy Master
8 октября 2018, 22:31
почему решила, что ошибка?
если у тебя в идее они зачеркнуты - это значит, что это просто устаревшие методы (Deprecated), и что сейчас уже лучше воспользоваться более новыми, о чем написал vkondratiev.
+1
hidden #598481
8 октября 2018, 21:38полезный
Смотри.
SimpleDateFormat - это класс, который позволяет форматировать даты.
У него два основных метода это format() и parse().
С помощью первого ты по заданному шаблону можешь из имеющейся даты (класс Date) получить строку, с помощью второго - наоборот - из строки дату. Угадай какой использовать :)
Итак, ты получила из строки экземпляр Date. По сути это число миллисекунд с 01.01.1970, и особо полезных методов у него нет, сплошные @Deprecated. В общем, чтобы как-то с этим числом миллисекунд оперировать, стоит использовать более совершенные классы.
Например GregorianCalendar.
Создаешь новый экземляр этого класса, говоришь ему .setTime(date) и получаешь экземпляр календаря с этой датой. Это уже достаточно мощная штука, можно посмотреть его константы и методы. У календаря есть дни, недели, месяцы, дни недели, дни года, недели года и чего только нет еще. Я делал так:
ну и дальше уже нужные проверки.
Если погуглить, можно найти более новые классы, которые можно использовать вместо календаря, которые имеют еще больший функционал, но это на усмотрение.
Коротко, можно почитать например тут
http://developer.alexanderklimov.ru/android/java/date.php (первое попавшееся)
а так, что угодно по запросу "java date"
Или oracle docs + просто полазить внутри классов и изучить методы +3
Polina
8 октября 2018, 23:15
спасибо за разъяснения:)
0