Convertendo Data Java em OffsetDateTime

Convertendo Data Java em OffsetDateTime

1. Introdução

Neste tutorial, aprendemos sobre a diferença entreDateeOffsetDateTime. Também aprendemoshow to convert from one to the other.

2. Diferença entreDate eOffsetDateTime

OffsetDateTime foi introduzido no JDK 8 como uma alternativa moderna parajava.util.Date.

OffsetDateTime is a thread-safe class that stores date and time to a precision of nanoseconds.Date, por outro lado, não é seguro para thread e armazena o tempo com precisão de milissegundos.

OffsetDateTime é uma classe baseada em valor, o que significa quewe need to use equals when comparing references em vez do típico ==.

A saída do métodoOffsetDateTime'stoString está no formato ISO-8601, enquantoDate'stoString está em um formato não padrão personalizado.

Vamos chamartoString das duas classes para ver a diferença:

Date: Sat Oct 19 17:12:30 2019
OffsetDateTime: 2019-10-19T17:12:30.174Z

Date não pode armazenar fusos horários e deslocamentos correspondentes. A única coisa que um objetoDate contém é o número de milissegundos desde 1º de janeiro de 1970, 00:00:00 UTC, portanto, se nosso horário não estiver em UTC, devemosstore the timezone in a helper class. Ao contrário,OffsetDateTime armazena oZoneOffset internamente.

3. ConvertendoDate emOffsetDateTime

ConverterDate emOffsetDateTime é muito simples. Se nossoDate estiver em UTC, podemos convertê-lo com uma única expressão:

Date date = new Date();
OffsetDateTime offsetDateTime = date.toInstant()
  .atOffset(ZoneOffset.UTC);

Se oDate original não estiver em UTC, podemos fornecer o deslocamento (armazenado em um objeto auxiliar, porque conforme mencionado anteriormente, a classe Date não pode armazenar fusos horários).

Digamos que nossoDate original seja +3: 30 (horário de Teerã):

int hour = 3;
int minute = 30;
offsetDateTime = date.toInstant()
  .atOffset(ZoneOffset.ofHoursMinutes(hour, minute));

OffsetDateTime fornecemany useful methods que pode ser usado posteriormente. Por exemplo, podemos simplesmentegetDayOfWeek(),getDayOfMonth() egetDayOfYear(). Também é muito fácil comparar dois objetos OffsetDateTime com os métodosisAftereisBefore.

Acima de tudo,it’s a good practice to avoid the deprecated Date class entirely.

4. Conclusão

Neste tutorial, aprendemos como é simples converter deDate emOffsetDateTime.

E, como sempre, o código está disponívelover on Github.