2016-02-12 25 views
6

Chcę utworzyć wystąpienie LocalDateTime w dniu/godzinie następnego (na przykład) poniedziałku.Uzyskaj następną wartość LocalDateTime dla danego dnia tygodnia

Czy w Java Time API jest jakakolwiek metoda, czy należy wykonać obliczenia na ile dni między datą bieżącą a docelową, a następnie użyć metody LocalDateTime.of()?

+0

Polecam: https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html – Fincio

+3

@Fincio Z pewnością nie. – Tunaki

+0

LocalDateTime \t plus tygodnie (długie tygodnie)? – Fincio

Odpowiedz

11

Nie trzeba wykonywać żadnych obliczeń ręcznie.

Można ustawić określoną datę za pomocą regulatora za pomocą metody LocalDateTime.with(adjuster). Jest wbudowany regulator do następnego dnia tygodnia: TemporalAdjusters.next(dayOfWeek):

Zwraca następny dzień-of-tygodniowy regulator, który dostosowuje datę pierwszego wystąpienia określony dzień-of-tydzień po data jest dostosowywana.

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

Ten kod zwróci następny poniedziałek na podstawie bieżącej daty.

Korzystanie importu statyczne, to sprawia, że ​​kod łatwiejsze do odczytania:

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

Należy pamiętać, że jeśli bieżąca data jest już w poniedziałek, to kod zwróci następny poniedziałek (tj Poniedziałek od następnego tygodnia). Jeśli chcesz zachować aktualną datę w tym przypadku, możesz użyć nextOrSame(dayOfWeek).