Получите оставшиеся даты текущей недели, используя java - PullRequest
4 голосов
/ 11 июля 2020

Я использую следующий код для получения текущей даты и следующих дат:

List<String> list=new ArrayList();
int nextWeekId=2;
int currentWeekId=1;

LocalDate localDate = LocalDate.now();
for (int i = 0; i < list.size(); i++) {
    if (i >= 7) {
        saveDetails(nextWeekId,list.get(i), java.sql.Date.valueOf(localDate.plusDays(i)));
    } else {
        saveDetails(currentWeekId, list.get(i), java.sql.Date.valueOf(localDate.plusDays(i)));
    }
}

Мой list размер всегда будет size = 14. Неделя всегда должна начинаться с Monday. Я хочу это, если, например, сегодня Friday, а дата 2020-07-10. Тогда моя система сохранит дату 2020-07-10 , 2020-07-11 , 2020-07-12 вместо currentWeekId, а полные следующие семь дней - против nextWeekId. Порядок доступа к значениям не имеет значения.

Ответы [ 6 ]

3 голосов
/ 11 июля 2020

Чтобы получить оставшиеся дни текущей недели, вам необходимо выполнить итерацию с текущей даты до следующего понедельника, как показано ниже:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class Main {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        LocalDate firstDayOfNextWeek = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        while (localDate.isBefore(firstDayOfNextWeek)) {
            System.out.println(localDate);
            localDate = localDate.plusDays(1);
        }
    }
}

Вывод:

2020-07-11
2020-07-12

Обратите внимание, что LocalDate#with возвращает копию целевого объекта с одним измененным элементом; это неизменный эквивалент метода set в JavaBean.

[Обновление]: Ниже приведен еще один способ (Cortesy: Basil Bourque ) сделать it:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        LocalDate firstDayOfNextWeek = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        List<LocalDate> remainingDays = localDate.datesUntil(firstDayOfNextWeek)
                .collect(Collectors.toList());
        System.out.println(remainingDays);
    }
}

Вывод:

[2020-07-11, 2020-07-12]

Отметьте LocalDate#datesUntil, чтобы узнать больше об этом.

[Другое обновление]

Размещение этого обновления, чтобы помочь OP перечислить все дни следующей недели:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();

        // Remaining days of the current week
        LocalDate firstDayOfNextWeek = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        List<LocalDate> remainingDays = localDate.datesUntil(firstDayOfNextWeek).collect(Collectors.toList());
        System.out.println(remainingDays);

        // Days of next week
        LocalDate firstDayOfNextToNextWeek = firstDayOfNextWeek.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        List<LocalDate> daysOfNextWeek = firstDayOfNextWeek.datesUntil(firstDayOfNextToNextWeek)
                .collect(Collectors.toList());
        System.out.println(daysOfNextWeek);
    }
}

Вывод:

[2020-07-11, 2020-07-12]
[2020-07-13, 2020-07-14, 2020-07-15, 2020-07-16, 2020-07-17, 2020-07-18, 2020-07-19]
2 голосов
/ 11 июля 2020

Попробуйте так

LocalDate localDate = LocalDate.now();
// Current week dates
LocalDate nextWeekStart = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
List<LocalDate> currentWeekdays = localDate.datesUntil(nextWeekStart).collect(Collectors.toList());
// Next week dates
LocalDate nextWeekStart2 = nextWeekStart.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
List<LocalDate> nextWeekdays = nextWeekStart.datesUntil(nextWeekStart2).collect(Collectors.toList());
2 голосов
/ 11 июля 2020

Проверьте, в какой день недели дата начала, а затем l oop с этого дня на воскресенье

LocalDate date = LocalDate.of(2020, 7, 10);
List<LocalDate> thisWeek = new ArrayList<>();

int dayCount = 0;
for (int i = date.getDayOfWeek().getValue(); i <= DayOfWeek.SUNDAY.getValue(); i++) {
    thisWeek.add(date.plusDays(dayCount++));
}

Чтобы использовать это решение для сохранения дат, как в вопросе, это будет выглядеть примерно так

int dayCount = 0;
for (int i = date.getDayOfWeek().getValue(); i <= DayOfWeek.SUNDAY.getValue(); i++) {
    saveDetails(currentWeekId,list.get(dayCount), date.plusDays(dayCount++));
}
for (DayOfWeek day : DayOfWeek.values()) {
    saveDetails(nextWeekId,list.get(dayCount), date.plusDays(dayCount++));
}
1 голос
/ 11 июля 2020

Вы можете использовать getWeek из кода, приведенного ниже, для текущей недели вам нужно пройти 1, следующую неделю 2, следующую неделю 3 и так далее ...

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

public class WeekDates {
    public static void main(String[] args) {
        System.out.println(getWeek(1));
        System.out.println(getWeek(2));
        System.out.println(getWeek(3));
    }

    public static List<LocalDate> getWeek(int week) {
        List<LocalDate> list = new ArrayList<>();
        LocalDate date = LocalDate.now();
        int days = 7 - date.getDayOfWeek().getValue() + 1;
        if (week != 1) {
            date = date.plusDays((week - 2) * 7 + days);
            days = 7;
        }
        for (int i = 0; i < days; i++) {
            list.add(date);
            date = date.plusDays(1);
        }
        return list;
    }
}
1 голос
/ 11 июля 2020
    //curent day
    LocalDate localDate = LocalDate.now();

    // find name of the day
    String dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.SHORT_STANDALONE , Locale.US);

    // set a week distance from current day
    LocalDate deadlineDate = LocalDate.now().plusDays(7);

    // add dates to a list from current day to a week distance 
    List<LocalDate> dates = Stream.iterate(localDate, date -> date.plusDays(7))
            .limit(ChronoUnit.DAYS.between(localDate, deadlineDate))
            .collect(Collectors.toList());

    System.out.println(dates.size() + " days to finish the order starting from " + dayOfWeek);  // 7 days to finish the order starting from Sat


    System.out.println(dates);  // [2020-07-11, 2020-07-18, 2020-07-25, 2020-08-01, 2020-08-08, 2020-08-15, 2020-08-22]
1 голос
/ 11 июля 2020

Вот один способ.

LocalDate localDate = LocalDate.now();

List<LocalDate> dates = localDate
           .datesUntil(localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)))
           .collect(Collectors.toList());
        
System.out.println(dates);

Печать

[2020-07-11, 2020-07-12]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...