Come iniziare e concludere una giornata utilizzando Java

1. Panoramica

In questo breve tutorial impareremo come iniziare e finire una giornata in Java , utilizzando esempi semplici e diretti per diversi scenari.

Useremo l'API data / ora 8 di Java per creare questi esempi.

Nel caso in cui desideri leggere un po 'di più sulla libreria di data e ora 8 di Java prima di procedere, puoi iniziare qui.

2. Da un oggetto LocalDate

Prima di tutto, vediamo come possiamo ottenere l'inizio o la fine di una giornata che ci viene fornita come oggetto LocalDate , come ad esempio:

LocalDate localDate = LocalDate.parse("2018-06-23");

2.1. atStartOfDay ()

Il modo più semplice per ottenere un LocalDateTime che rappresenta l'inizio di un particolare giorno è utilizzare il metodo atStartOfDay () :

LocalDateTime startOfDay = localDate.atStartOfDay();

Questo metodo è sovraccarico, quindi nel caso in cui vogliamo ottenere un ZonedDateTime da esso, possiamo farlo specificando lo ZoneId :

ZonedDateTime startOfDay = localDate.atStartOfDay(ZoneId.of("Europe/Paris"));

2.2. di()

Un altro modo in cui possiamo ottenere lo stesso risultato è usare il metodo of () , fornendo un LocalDate e uno dei campi statici di LocalTime :

LocalDateTime startOfDay = LocalDateTime.of(localDate, LocalTime.MIDNIGHT);

LocalTime offre i seguenti campi statici: MIDNIGHT (00:00), MIN (00:00), NOON (12:00) e MAX (23: 59: 59.999999999).

Pertanto, se vogliamo ottenere la fine della giornata, utilizzeremo il valore MAX .

Proviamolo, ma con un metodo diverso.

2.3. atTime ()

Questo metodo è sovraccarico, permettendoci di specificare il tempo desiderato utilizzando ore, minuti, secondi o anche nanosecondi.

In questo caso, in ogni caso, useremo il LocalTime s' MAX campo come argomento per ottenere l'ultimo momento della giornata data:

LocalDateTime startOfDay = localDate.atTime(LocalTime.MAX);

2.4. atDate ()

Questo esempio è abbastanza simile ai precedenti, ma questa volta useremo il metodo atDate () di un oggetto LocalTime , passando il LocalDate come argomento:

LocalDateTime endOfDate = LocalTime.MAX.atDate(localDate);

3. Da un oggetto LocalDateTime

È quasi ovvio che possiamo ottenere LocalDate da esso e quindi utilizzare uno dei metodi della sezione 2 per ottenere la fine o l'inizio della giornata da esso:

LocalDateTime localDateTime = LocalDateTime .parse("2018-06-23T05:55:55"); LocalDateTime endOfDate = localDateTime .toLocalDate().atTime(LocalTime.MAX);

Ma in questa sezione, analizzeremo un altro metodo per ottenere l'oggetto con la sua sezione temporale impostata all'inizio o alla fine della giornata, direttamente da un altro oggetto LocalDateTime specificato .

3.1. con()

Tutte le classi che implementano l' interfaccia temporale possono utilizzare questo metodo .

In questo caso, useremo la firma del metodo che accetta un TemporalField (in particolare, uno dei valori ChronoField Enum ) e un argomento lungo come nuovo valore del campo:

LocalDateTime endOfDate = localDateTime.with(ChronoField.NANO_OF_DAY, LocalTime.MAX.toNanoOfDay());

4. Da un oggetto ZonedDateTime

Se ci viene fornito un ZonedDateTime, possiamo usare il metodo with () poiché implementa anche l' interfaccia temporale :

ZonedDateTime startofDay = zonedDateTime.with(ChronoField.HOUR_OF_DAY, 0);

5. conclusione

Per riassumere, abbiamo analizzato molti modi diversi per ottenere l'inizio e la fine di una giornata in Java per molti scenari di casi diversi.

Infine, abbiamo appreso le intuizioni delle 8 classi di libreria Data e ora di Java e abbiamo familiarizzato con molte delle sue classi e interfacce.

Come sempre, è possibile accedere a tutti gli esempi nel nostro repository GitHub.