У меня есть дата начала и дата окончания. Я должен выполнить итерации в течение каждого дня между этими 2 датами.
Что лучший способ состоит в том, чтобы сделать это?
Я могу предложить только что-то как:
Date currentDate = new Date (startDate.getTime ());
while (true) {
if (currentDate.getTime () >= endDate.getTime ())
break;
doSmth ();
currentDate = new Date (currentDate.getTime () + MILLIS_PER_DAY);
}
Готов к запуску; -)
public static void main(String[] args) throws ParseException {
GregorianCalendar gcal = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
Date start = sdf.parse("2010.01.01");
Date end = sdf.parse("2010.01.14");
gcal.setTime(start);
while (gcal.getTime().before(end)) {
gcal.add(Calendar.DAY_OF_YEAR, 1);
System.out.println( gcal.getTime().toString());
}
}
Используйте объект календаря, если вы хотите манипулировать даты.
Calendar c = Calendar.getInstance();
// ... set the calendar time ...
Date endDate = new Date();
// ... set the endDate value ...
while (c.getTime().before(endDate) {
// do something
c.add(Calendar.DAY_OF_WEEK, 1);
}
или использовать JODA Time
Я настоятельно рекомендую использовать время JODA Time :
Поскольку ClassValidator требует в качестве параметра объект Class, НЕ является экземпляром рассматриваемого класса. Имейте в виду, что вы можете сделать то, что вы пытаетесь сделать с этим кодом:
ClassValidator<? extends T> validator = new ClassValidator<? extends T>(validateMe.getClass());
-121--3959400- Просто для уродливой буквенной интерпретации:
Console.WriteLine("numbers from 1 to 100 without using loops, ");
(вы можете смеяться сейчас или позже, или нет)
-121--1585821-Ditto на тех, кто говорит использовать объект Calendar.
Вы можете столкнуться с неожиданными проблемами, если попытаетесь использовать объект Date и добавить к нему 24 часов.
Вот загадка для вас: Какой самый длинный месяц в году? Вы можете подумать, что на этот вопрос нет ответа. Семь месяцев имеют 31 день каждый, так что они все одинаковой длины, верно? Ну, в США это было бы почти правильно, а в Европе было бы неправильно! В Европе октябрь - самый длинный месяц. Он имеет 31 дней и 1 часа, потому что европейцы устанавливают свои часы обратно 1 час на летнее время в октябре, делая один день в октябре последние 25 часов. (Американцы теперь начинают переходить на летнее время в ноябре, у которого есть 30 дней, поэтому ноябрь все еще короче октября или декабря. Таким образом, сделать эту загадку не так забавно для американцев.)
Я однажды столкнулся с проблемами, делая именно то, что вы пытаетесь сделать: я использовал объект Date и добавил к нему 24 часов в цикле. Он работал до тех пор, пока я не пересекал границы перехода на летнее время. Но когда я это сделал, вдруг я пропустил день или ударил в тот же день дважды, потому что полночь марта 8, 2009 + 24 часа = 1:00 утра 10 марта. Бросьте время, как я делал, и 9 марта было таинственно пропущено. Точно так же полночь ночей 1, 2009 + 24 часов = 23:00 ночей 1, и мы дважды ударили ночей 1.