首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得两个日期之间的日期列表?

如何获得两个日期之间的日期列表?
EN

Stack Overflow用户
提问于 2013-07-17 06:24:04
回答 2查看 13.5K关注 0票数 3

在我的应用程序中,用户应该从listview中选择date。问题是生成这个列表。例如,我需要2010-2013年6-8月之间的所有日期(可能是daymonth年份E 210)。有什么方法允许获取数据吗?

示例:我需要在01.01.2013-10.01.2013之间的日期

  1. 01.01.2013
  2. 02.01.2013
  3. 03.01.2013
  4. 04.01.2013
  5. 05.01.2013
  6. 06.01.2013
  7. 07.01.2013
  8. 08.01.2013
  9. 09.01.2013
  10. 10.01.2013

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-17 06:27:06

对于一个清单,你只需做:

代码语言:javascript
运行
复制
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>,那么您可以编写自己的类来非常有效地完成这个任务,而不是构建一个列表。如果你不介意有一定程度的嵌套,你可以用一个匿名类来做这件事。例如(未经测试):

代码语言:javascript
运行
复制
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();
                }
            };
        }
    };
}
票数 5
EN

Stack Overflow用户

发布于 2013-07-17 06:35:27

使用这样的DatePicker片段:

代码语言:javascript
运行
复制
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);
    }

}

这应该更容易得到日期在第一位。日期范围使用下面的代码:

代码语言:javascript
运行
复制
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;
}

干杯!

学分:this

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17692575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档