يمكنك الحصول على جميع التواريخ بين تاريخين معينين باستخدام Java 8 LocalDate
بطرق مختلفة، واحدة منها هي استخدام Stream
لإنشاء تدفق من التواريخ. فيما يلي كيف يمكنك القيام بذلك:
javaLocalDate startDate = LocalDate.now();
LocalDate endDate = startDate.plusMonths(1).withDayOfMonth(1); // First day of next month
List datesInRange = new ArrayList<>();
for (LocalDate date = startDate; date.isBefore(endDate); date = date.plusDays(1)) {
datesInRange.add(date);
}
هذا سينشئ قائمة datesInRange
تحتوي على جميع التواريخ بين startDate
و endDate
(باستثناء endDate
).
استخدام Stream
، يمكنك القيام بذلك كالتالي:
javaLocalDate startDate = LocalDate.now();
LocalDate endDate = startDate.plusMonths(1).withDayOfMonth(1); // First day of next month
List datesInRange = startDate.datesUntil(endDate)
.collect(Collectors.toList());
يقوم هذا الكود بإنشاء تدفق من التواريخ بين startDate
و endDate
، ثم يجمعها في قائمة.
في كلتا الحالتين، ستحصل على قائمة تحتوي على جميع التواريخ بين startDate
و endDate
.
المزيد من المعلومات
بالتأكيد! في Java 8، يمكنك أيضًا استخدام Stream.iterate
لإنشاء تدفق من التواريخ بين تاريخين معينين بشكل أكثر تعقيدًا. على سبيل المثال:
javaLocalDate startDate = LocalDate.now();
LocalDate endDate = startDate.plusMonths(1).withDayOfMonth(1); // First day of next month
List datesInRange = Stream.iterate(startDate, date -> date.plusDays(1))
.limit(ChronoUnit.DAYS.between(startDate, endDate))
.collect(Collectors.toList());
هذا الكود يستخدم Stream.iterate
لإنشاء تدفق من التواريخ بدءًا من startDate
وثم إضافة يوم واحد في كل تكرار. يتم حدود عدد التواريخ باستخدام limit
ليكون عددها هو عدد الأيام بين startDate
و endDate
باستخدام ChronoUnit.DAYS.between(startDate, endDate)
.
باستخدام أي من هذه الطرق، يمكنك الحصول على قائمة تحتوي على جميع التواريخ بين تاريخين معينين في Java 8 LocalDate
.