Мне нужен цикл, который выполняет итерации через интервал дат

У меня есть дата начала и дата окончания. Я должен выполнить итерации в течение каждого дня между этими 2 датами.

Что лучший способ состоит в том, чтобы сделать это?

Я могу предложить только что-то как:

Date currentDate = new Date (startDate.getTime ());
while (true) {
   if (currentDate.getTime () >= endDate.getTime ())
      break;
   doSmth ();
   currentDate = new Date (currentDate.getTime () + MILLIS_PER_DAY);
}
7
задан Roman 15 January 2010 в 19:27
поделиться

4 ответа

Готов к запуску; -)

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());
    }
}
13
ответ дан 6 December 2019 в 07:26
поделиться

Используйте объект календаря, если вы хотите манипулировать даты.

    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

3
ответ дан 6 December 2019 в 07:26
поделиться

Я настоятельно рекомендую использовать время JODA Time :

Время Java Joda - реализовать ассортимент дата итератор

2
ответ дан 6 December 2019 в 07:26
поделиться

Поскольку 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.

6
ответ дан 6 December 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: