2016-02-12 26 views
6

Voglio creare istanza di LocalDateTime alla data/ora del prossimo (ad esempio) Lunedi.Ottenere il prossimo LocalDateTime per un determinato giorno della settimana

Esiste un metodo nell'API Java Time o devo calcolare quanti giorni sono tra la data corrente e quella di destinazione e quindi utilizzare il metodo LocalDateTime.of()?

+0

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

+3

@Fincio Certamente no. – Tunaki

+0

LocalDateTime \t plusWeeks (settimane lunghe)? – Fincio

risposta

11

Non è necessario eseguire calcoli a mano.

È possibile regolare una data specifica con un regolatore con il metodo LocalDateTime.with(adjuster). V'è un built-in di regolazione per il giorno successivo della settimana: TemporalAdjusters.next(dayOfWeek):

Restituisce la successiva regolazione giorno della settimana, che regola la data per la prima occorrenza del specificato giorno della settimana dopo la data viene regolata.

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

Questo codice restituirà il prossimo lunedi in base alla data corrente.

Utilizzando le importazioni statiche, questo rende il codice più facile da leggere:

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

si noti che se la data corrente è già su un Lunedi, questo codice tornerà il prossimo lunedi (cioè il lunedi dalla prossima settimana). Se si desidera mantenere la data corrente in quel caso, è possibile utilizzare nextOrSame(dayOfWeek).