Como obter o início e o fim de um dia usando Java

Como obter o início e o fim de um dia usando Java

1. Visão geral

Neste breve tutorial,we’ll learn how to get the start and the end of a day in Java, usando exemplos simples e diretos para diferentes cenários.

Estaremos usandoJava’s 8 Date/Time API para construir esses exemplos.

Caso queira ler um pouco mais sobre a biblioteca Java 8 Date and Time antes de continuar, você pode começarhere.

2. De um objetoLocalDate

Em primeiro lugar, vamos ver como podemos obter o início ou o final de um dia dado a nós como um objetoLocalDate, como:

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

2.1. atStartOfDay()

A maneira mais simples de obter umLocalDateTime representando o início de um determinado dia é usando o métodoatStartOfDay():

LocalDateTime startOfDay = localDate.atStartOfDay();

Este método está sobrecarregado, portanto, caso desejemos obterZonedDateTime dele, podemos fazer isso especificandoZoneId:

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

2.2. of()

Outra maneira de obter o mesmo resultado é usando o métodoof(), fornecendo umLocalDatee um dos campos estáticos deLocalTime:

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

LocalTime oferece os seguintes campos estáticos:MIDNIGHT (00:00),MIN (00:00),NOON (12:00) eMAX (23: 59: 59.999999999).

Portanto, se quisermos chegar ao fim do dia, usaríamos o valorMAX.

Vamos experimentar, mas com um método diferente.

2.3. atTime()

Esse método está sobrecarregado, permitindo especificar o tempo desejado usando horas, minutos, segundos ou até nanossegundos.

Nesse caso, de qualquer forma, usaremos o campoLocalTime'sMAX como o argumento para obter o último momento de determinado dia:

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

2.4. atDate()

Este exemplo é bastante semelhante aos anteriores, mas desta vez, usaremos o métodoatDate() de um objetoLocalTime, passandoLocalDate como argumento:

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

3. De um objetoLocalDateTime

É quase desnecessário dizer que podemos obterLocalDate dele e, em seguida, usar qualquer um dos métodos da seção 2 para obter o fim ou o início do dia a partir dele:

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

Mas nesta seção, vamos analisar um outro método para obter o objeto com sua seção de tempo definida para o início ou fim do dia, diretamente de outro objetoLocalDateTime fornecido.

3.1. with()

All classes implementing the Temporal interface can use this method.

Neste caso, usaremos a assinatura do método que leva umTemporalField (notavelmente, um dos valoresChronoField Enum) e um sargumentolong como o novo valor do campo:

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

4. De um objetoZonedDateTime

Se tivermos umZonedDateTime,, podemos usar o métodowith(), pois ele também implementaTemporal interface:

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

5. Conclusão

Para resumir, analisamos muitas maneiras diferentes de obter o início e o fim de um dia em Java para muitos cenários de caso diferentes.

Por fim, aprendemos sobre os insights das 8 classes da biblioteca de data e hora do Java e nos familiarizamos com muitas de suas classes e interfaces.

Como sempre, todos os exemplos podem ser acessados ​​emour GitHub repository.