java.time 通过脱糖
考虑为您的日期工作使用现代 Java 日期和时间 API java.time。LocalDate
是用于日期的类(没有时间)。我假设您想要所有日期,包括两个给定的日期。
String first = "2012-07-15";
String second = "2012-07-21";
List<LocalDate> dates = LocalDate.parse(first)
.datesUntil(LocalDate.parse(second).plusDays(1))
.collect(Collectors.toList());
System.out.println(dates);
输出:
[2012-07-15、2012-07-16、2012-07-17、2012-07-18、2012-07-19、2012-07-20、2012-07-21]
LocalDate.datesUntil()
为我们提供了不包括指定结束日期的日期流,因此我们需要在其中添加一天以包含它。
我正在利用您的字符串采用 ISO 8601 格式并将LocalDate
此格式解析为其默认格式的事实,即没有任何显式格式化程序。
或通过 ThreeTenABP
如果由于某种原因您使用的是 ThreeTenABP 库而不是脱糖,我相信该datesUntil
方法不存在。在这种情况下,请改用循环。
List<LocalDate> dates = new ArrayList<>();
LocalDate currentDate = LocalDate.parse(first);
LocalDate lastDate = LocalDate.parse(second);
while (! currentDate.isAfter(lastDate )) {
dates.add(currentDate);
currentDate = currentDate.plusDays(1);
}
[2012-07-15、2012-07-16、2012-07-17、2012-07-18、2012-07-19、2012-07-20、2012-07-21]
问题:java.time 不需要 Android API 级别 26 吗?
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
- 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
- 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
- 在较旧的 Android 上,要么使用脱糖,要么使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。在后一种情况下,请确保您从
org.threeten.bp
子包中导入日期和时间类。
链接