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.