3

私のアプリケーションでは、ユーザーは から日付を選択する必要がありますlistview。問題は、このリストを生成することです。たとえば、2010年から2013年または6月から8月までのすべての日付が必要です(期間はおそらく)。そのデータを取得できる方法はありますか?

例: 2013 年 1 月 1 日から 2013 年 1 月 10 日までの日付が必要です

  1. 2013.01.01
  2. 2013.02.01
  3. 2013.03.01
  4. 2013.04.01
  5. 2013.05.01
  6. 2013.06.01
  7. 2013.07.01
  8. 2013.08.01
  9. 2013.09.01
  10. 10.01.2013

前もって感謝します

4

2 に答える 2

5

リストの場合は、次のことができます。

public static List<LocalDate> datesBetween(LocalDate start, LocalDate end) {
    List<LocalDate> ret = new ArrayList<LocalDate>();
    for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {
        ret.add(date);
    }
    return ret;
}

が含まれることに注意してくださいend最後を除外したい場合は、ループ内の条件を に変更するだけdate.isBefore(end)です。

のみが必要な場合Iterable<LocalDate>は、リストを作成するのではなく、独自のクラスを作成してこれを非常に効率的に行うことができます。ある程度の入れ子を気にしないのであれば、匿名クラスでこれを行うことができます。例(未テスト):

public static Iterable<LocalDate> datesBetween(final LocalDate start,
                                               final LocalDate end) {
    return new Iterable<LocalDate>() {
        @Override public Iterator<LocalDate> iterator() {
            return new Iterator<LocalDate>() {
                private LocalDate next = start;

                @Override
                public boolean hasNext() {
                    return !next.isAfter(end);
                }

                @Override
                public LocalDate next() {
                    if (next.isAfter(end)) {
                        throw NoSuchElementException();
                    }
                    LocalDate ret = next;
                    next = next.plusDays(1);
                    return ret;
                }

                @Override
                public void remove() {
                    throw new UnsupportedOperationException();
                }
            };
        }
    };
}
于 2013-07-17T06:27:06.667 に答える
3

DatePicker次のようなフラグメントを使用します。

private static class DatePickerFragment extends DialogFragment 
                                     implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // Copy the Date to the EditText set.
        dateValue = String.format("%04d", year) + "-" + String.format("%02d", monthOfYear + 1) + "-" + String.format("%02d", dayOfMonth);
    }

}

これにより、そもそも日付を取得しやすくなります。日付範囲には次のコードを使用します。

public static List<Date> dateInterval(Date initial, Date final) {
     List<Date> dates = new ArrayList<Date>();
     Calendar calendar = Calendar.getInstance();
     calendar.setTime(initial);

     while (calendar.getTime().before(final)) {
         Date result = calendar.getTime();
         dates.add(result);
         calendar.add(Calendar.DATE, 1);
     }

return dates;
}

乾杯!

クレジット:これ

于 2013-07-17T06:35:27.333 に答える