簡體   English   中英

如何顯示兩個日期之間的所有星期一?

[英]How to display all Mondays between two dates?

我嘗試在兩個日期之間顯示所有星期一,但我不知道該怎么做。 我想要求用戶在所有星期一使用掃描儀輸入兩個日期到 output。

    String s = "2020-07-20";
    String e = "2020-09-20";
    LocalDate start = LocalDate.parse(s);
    LocalDate end = LocalDate.parse(e);
    List<LocalDate> totalDates = new ArrayList<>();

    while (!start.isAfter(end)) {
        totalDates.add(start);
        start = start.plusDays(1);

    }

要獲得第一個星期一,請使用:

LocalDate monday = start.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));

現在您必須處理一個極端情況:如果startend之間沒有星期一怎么辦? 這意味着這里計算的星期一在end之后:

if (monday.isAfter(end)) {
    totalDates = List.of();
}

之后,您可以使用方便的datesUntil方法獲得一系列星期一:

totalDates = monday.datesUntil(end, Period.ofWeeks(1)).collect(Collectors.toList());

請注意datesUntil不包括結束日期。 如果您需要包含結束日期,請傳入end.plusDays(1)

您可以使用.getDayOfWeek()獲取DayOfWeek並與DayOfWeek.MONDAY進行比較

while (!start.isAfter(end)) {
    if(start.getDayOfWeek().equals(DayOfWeek.MONDAY)) {
        totalDates.add(start);
    }
    start = start.plusDays(1);
}

並且優化是使用start.plusWeeks(1)而不是start.plusDays(1)並且您需要在下一個星期一之前獲得。

start = start.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
while (!start.isAfter(end)) {
    if(start.getDayOfWeek().equals(DayOfWeek.MONDAY)) {
        totalDates.add(start);
    }
    start = start.plusWeeks(1);
}

您需要使用getDayOfWeek() ,這是解決方案:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class AllMondays {
    public static void main(String[] args) {
        String s = "2020-07-20";
        String e = "2020-09-20";
        LocalDate start = LocalDate.parse(s);
        LocalDate end = LocalDate.parse(e);
        List<LocalDate> totalDates = new ArrayList<>();

        LocalDate nextMonday = start;
        int daysToAdvance = 1;
        while (!nextMonday.isAfter(end)) {
            if (nextMonday.getDayOfWeek() == DayOfWeek.MONDAY) {
                daysToAdvance = 7;
                totalDates.add(nextMonday);
            }
            nextMonday = nextMonday.plusDays(daysToAdvance);
        }
        System.out.println(totalDates);
    }
}

這里的“find_day”是您要在日期范圍內查找的日期

SimpleDateFormat format1 = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault());
            Date sub_start_date = format1.parse("01-06-2021");
            Date enddate = format1.parse("30-06-2021");
    
            Calendar min_date_c = Calendar.getInstance();
            min_date_c.setTime(sub_start_date);
            Calendar max_date_c = Calendar.getInstance();
            max_date_c.setTime(enddate);
    
            for (Calendar loopdate = min_date_c; min_date_c.before(max_date_c); min_date_c.add(Calendar.DATE, 1), loopdate = min_date_c) {
                int dayOfWeek = loopdate.get(Calendar.DAY_OF_WEEK);
                // if (dayOfWeek == Calendar.MONDAY || dayOfWeek == Calendar.SATURDAY) {
                if (dayOfWeek == find_day) {
                    Calendar[] disabledDays = new Calendar[1];
                    disabledDays[0] = loopdate;
                    Date newdate = loopdate.getTime();
                    String strDate = format1.format(newdate);
                    Log.e("DATES>>> ", "" + strDate);
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM