1

我有两个变量:

  • startDate- 例如 29/04/2018
  • howManyDays- 例如 30

我想从日期 29/04/2018 获取 30 天的列表。你能告诉我该怎么做吗?我发现两个日期之间只有几天。

int days = Days.daysBetween(startDate, endDate).getDays();
List<LocalDate> dates = new ArrayList<LocalDate>(days);  // Set initial capacity to `days`.
for (int i=0; i < days; i++) {
    LocalDate d = startDate.withFieldAdded(DurationFieldType.days(), i);
    dates.add(d);
}

我不知道如何更改代码。

4

3 回答 3

2
public static List<LocalDate> getLocalDates(String startdate, int days) {
        List<LocalDate> localDates = new ArrayList<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate localDate = LocalDate.parse(startdate, formatter);
        for (int i = 1; i <= days; i++) {
            localDates.add(localDate.plusDays(i));

        }
        return localDates;

    }

plusDays 应该可以解决问题

于 2018-04-29T09:19:14.690 回答
2

您可以使用此示例代码获取从特定日期开始的 30 个日期。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public class Days {

    public static void main(String[] args) {
        String startDate = "29/04/2018";
        int howManyDays = 30;

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate localDate = LocalDate.parse(startDate, formatter);
        List<LocalDate> dates = new ArrayList<>();
        for (int i = 0; i < howManyDays; i++) {
            dates.add(localDate.plusDays(i));
        }

        //For check
        dates.forEach(System.out::println);
    }
}

运行howManyDays=5给出:

2018-04-29
2018-04-30
2018-05-01
2018-05-02
2018-05-03
于 2018-04-29T09:19:30.137 回答
1

其他答案都很好。在您的 Android 手机上运行 Java 9 之前可能还需要一段时间,但对于其他阅读的人,我想提供 Java 9(及更高版本)代码片段:

    LocalDate startDate = LocalDate.of(2018, Month.APRIL, 29);
    int howManyDays = 30;
    List<LocalDate> dates = startDate.datesUntil(startDate.plusDays(howManyDays))
            .collect(Collectors.toList());
    System.out.println(dates);

输出是:

[2018-04-29、2018-04-30、2018-05-01、2018-05-02、2018-05-03、2018-05-04、2018-05-05、2018-05-06、2018 -05-07、2018-05-08、2018-05-09、2018-05-10、2018-05-11、2018-05-12、2018-05-13、2018-05-14、2018-05 -15、2018-05-16、2018-05-17、2018-05-18、2018-05-19、2018-05-20、2018-05-21、2018-05-22、2018-05-23 , 2018-05-24, 2018-05-25, 2018-05-26, 2018-05-27, 2018-05-28]

正如我在评论中已经说过的那样,更喜欢java.timeJoda-Time(您为您的问题找到的片段正在使用)。java.time是现代 Java 日期和时间 API。Joda-Time 主页说:

请注意,Joda-Time 被认为是一个基本上“完成”的项目。没有计划进行重大改进。如果使用 Java SE 8,请迁移到java.time(JSR-310)。

如果您确实想使用问题中的代码段,您所要做的就是删除第一行并更改dayshowManyDays第二行和第三行。

链接

于 2018-04-29T10:02:15.297 回答