Получить массив дат в диапазоне дат - PullRequest
0 голосов
/ 19 сентября 2018

Как сохранить дату в массиве из даты между датами в цикле?

Пример 1:
Первая дата = 26/9/2018
Последняя дата = 30/9/2018

Я хочу сохранить дату в цикле, как показано ниже:

new Date["26/9/2018","27/9/2018","28/9/2018","29/9/2018","30/9/2018"]

Что-то вроде:

for(int i = 0; FirstDate < LastDate; i++){
   //add array here by loop
}

Итак, я получил new Date[4], когда я выбрал, как показано ниже:

new Date[3], будет отображаться 29/9/2018

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете попробовать это:

        List<Date> dates = new ArrayList<Date>();

        String start_date ="26/9/2018";
        String end_date ="30/9/2018";

        DateFormat formatter ;

        formatter = new SimpleDateFormat("dd/M/yyyy");
        Date  startDate = null;
        Date  endDate = null;
        try {
            startDate = formatter.parse(start_date);
            endDate = formatter.parse(end_date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        long interval = 24*1000 * 60 * 60;
        long endTime =endDate.getTime() ;
        long curTime = startDate.getTime();
        while (curTime <= endTime) {
            dates.add(new Date(curTime));
            curTime += interval;
        }
        for(int i=0;i<dates.size();i++){
            String result = formatter.format(dates.get(i));
        }

Может быть не оптимально, но успешно протестировано, надеюсь, полезно.

0 голосов
/ 19 сентября 2018

Просто используйте этот код:

public Date[] getDateLoop() {
  String str_start_date = "26/9/2018";
  String str_end_date = "30/9/2018";
  SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  //Date date = sdf.parse(dateStr);
  Date start_date = null;
  try {
      start_date = sdf.parse(str_start_date);
  } catch (ParseException e) {
      e.printStackTrace();
  }

  Date end_date = null;
  try {
      end_date = sdf.parse(str_end_date);
  } catch (ParseException e) {
      e.printStackTrace();
  }

  long diff = TimeUnit.DAYS.convert(end_date.getTime() - start_date.getTime(), TimeUnit.MILLISECONDS);

  Date[] array_date = new Date[(int) diff + 1];
  for (int i = 0; i <= diff; i++) {
      Date temp_date = start_date;
      Calendar c = Calendar.getInstance();
      c.setTime(temp_date);
      c.add(Calendar.DATE, i);
      temp_date = c.getTime();
      array_date[i] = temp_date;
  }
  return array_date;
}
0 голосов
/ 19 сентября 2018

Я предлагаю вам использовать API LocalDate от Jake Warthon.Дата API не очень надежна в Android.Кстати, попробуйте это решение:

public ArrayList<LocalDate> getDateLoop() {
        LocalDate startDate = LocalDate.of(2018, 9, 26);
        LocalDate endDate = LocalDate.of(2018, 9, 30);
        ArrayList<LocalDate> dates = new ArrayList<>();

        for (int i = startDate.getDayOfMonth(); i <= endDate.getDayOfMonth(); i++) {
            LocalDate dateToAdd = LocalDate.of(startDate.getYear(), startDate.getMonth(), i);
            dates.add(dateToAdd);
        }
        return dates;
    }

Вот ссылка библиотеки: https://github.com/JakeWharton/ThreeTenABP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...