2016-02-12 2 views
6

Я хочу создать экземпляр LocalDateTime на дату/время следующего (например) понедельника.Получить следующий LocalDateTime за данный день недели

Есть ли какой-либо метод в Java Time API, или я должен делать вычисления, сколько дней находится между текущими и конечными датами, а затем использовать метод LocalDateTime.of()?

+0

Я бы порекомендовал: https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html – Fincio

+3

@Fincio Конечно нет. – Tunaki

+0

LocalDateTime \t plusWeeks (длинные недели)? – Fincio

ответ

11

Нет необходимости делать какие-либо вычисления вручную.

Вы можете настроить заданную дату с помощью регулятора с помощью метода LocalDateTime.with(adjuster). Там находится встроенный регулятор на следующий день недели: TemporalAdjusters.next(dayOfWeek):

Возвращает следующий день-недели регулятор, который регулирует дату первого вхождения в указанный день-недельного после дата корректируется.

public static void main(String[] args) { 
    LocalDateTime dateTime = LocalDateTime.now(); 
    LocalDateTime nextMonday = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); 
    System.out.println(nextMonday); 
} 

Этот код вернет следующий понедельник на основе текущей даты.

Использования статического импорта, это делает код легче читать:

LocalDateTime nextMonday = dateTime.with(next(MONDAY)); 

Обратите внимание, что если текущая дата уже на понедельник, этот код будет возвращать следующий понедельник (т.е. понедельника со следующей недели). Если вы хотите сохранить текущую дату в этом случае, вы можете использовать nextOrSame(dayOfWeek).