O java.util.Date
Antes de qualquer coisa, vamos definir aqui o ponto que estamos.
A implementação do java.util.Date está na JDK desde sua versão 1.0
Ou seja... É de se esperar que algumas coisas não se mostrem tão interessantes nos dias atuais, dado a sua idade.
Nesse primeiro momento, vamos ver como podemos trabalhar com a manipulação de datas a Classe java.util.Date do Java.
E o nosso primeiro passo é dar uma olhada na documentação oficial.
Vamos usar como referência o Java 8
E para começar a falar sobre o Java Date, vamos falar sobre seus construtores. São eles:
Date() // Marcado como @Deprecated desde a versão 1.1 da JDK Date(int year, int month, int date) // Marcado como @Deprecated desde a versão 1.1 da JDK Date(int year, int month, int date, int hrs, int min) // Marcado como @Deprecated desde a versão 1.1 da JDK Date(int year, int month, int date, int hrs, int min, int sec) Date(long date) // Marcado como @Deprecated desde a versão 1.1 da JDK Date(String s)
Date()
Este construtor vai alocar um objeto da classe Date e o inicializará com o milissegundo mais próximo do período da sua execução.
import java.util.Date; public class Exemplo001 { public static void main(Stirng[] args) { Date novaData = new Date(); System.out.println(novaData); // Tue Apr 06 20:23:08 BRT 2021 } }
Date(long date)
Diferente do construtor anterior, esse construtor espera que você passe os milissegundos com base padrão de tempo (epoch) que usa como referência 1 de janeiro de 1970 00:00:00.
Uma pequena pausa... O que é Epoch?
"O epoch timestamp é um padrão largamente aceito para representar uma data como um inteiro 32-bits a partir do início do Unix Epoch..."
Tradução feita por Marco Paulo Ollivier do Livro "Software Development: Na Open Source Approach" escrito por Allen Tucker, Ralph Morelli e Chamindra de Silva. Página 163. Editora CRC Press
Vamos testar com base no System.currentTimeMillis()
Esse método estático vai nos retornar o milissegundo mais próximo de sua execução com base no Sistema Operacional.
import java.util.Date; public class Exemplo001 { public static void main(Stirng[] args) { Long currentTimeMillis = System.currentTimeMillis**();** System.out.println(currentTimeMillis); // 1617752114615 Date novaData = new Date(currentTimeMillis); System.out.println(novaData); // Tue Apr 06 20:36:02 BRT 2021 } }
Métodos úteis
Alguns métodos da classe Date são muito úteis e serão usados com frequência durante a manipulação de datas.
São eles...
O java.util.Calendar
Já na JDK 1.1 foi observada a necessidade de facilitar alguns recursos que a class Date oferecia.
Sendo assim, a classe Calendar foi criada.
Com isso uma série de métodos e construtores da classe Date foi depreciada. Por exemplo o construtor Date(int year, int month, int date).
Calendar é uma classe abstrata que provê métodos para converter data entre um instante específico.
O Calendar possui alguns campos específicos para manipulação com MONTH, YEAR, HOUR, etc.
Capturando o instante atual com o Calendar:
import java.util.Calendar; public class Exemplo005 { public static void main(String[] args) { Calendar agora = Calendar.getInstance(); System.out.println(agora); // java.util.GregorianCalendar[time=1617753483688,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Sao_Paulo",offset=-10800000,dstSavings=0,useDaylight=false,transitions=93,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=96,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=58,SECOND=3,MILLISECOND=688,ZONE_OFFSET=-10800000,DST_OFFSET=0] } }
Manipulando datas:
import java.util.Calendar; public class Exemplo006 { public static void main(String[] args) { Calendar agora = Calendar.getInstance(); System.out.println("A data corrente é: " + agora.getTime()); agora.add(Calendar.DATE, -15); System.out.println("15 dias atrás: " + agora.getTime()); agora.add(Calendar.MONTH, 4) System.out.println("4 meses depois: " + agora.getTime()); agora.add(Calendar.YEAR, 2) System.out.println("2 anos depois: " + agora.getTime()); } }
Imprimindo datas e horas
Aqui vão algumas maneiras de se converter o resultado de um objeto Calendar
import java.util.Calendar; public class Exemplo007 { public static void main(String[] args) { Calendar agora = Calendar.getInstance(); System.out.printf("%tc\\n", agora); // Dom jul 14 20:58:11 BRT 2019 System.out.printf("%tF\\n", agora); // 2019-07-14 System.out.printf("%tD\\n", agora); // 07/14/19 System.out.printf("%tr\\n", agora); // 09:58:11 PM System.out.printf("%tT\\n", agora); // 20:58:11 } }
O java.text.DateFormat
Nesse ponto em que estamos existem, basicamente, duas classes para formatação de datas. O DateFormat e o SimpleDateFormat.
Ambos oferecem maneiras de formatar e parsear a saída das datas.
import java.text.DateFormat; import java.util.Date; public class Exemplo008 { public static void main(String[] args) { Date agora = new Date(); String dateToStr = DateFormat.getInstance().format(agora); System.out.println(dateToStr); // 06/04/2021 21:14 dateToStr = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(agora); System.out.println(dateToStr); // 6 de abril de 2021 21:13 dateToStr = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(agora); System.out.println(dateToStr); // 6 de abril de 2021 21:16:45 BRT } }
Já o SimpleDateFormat traz uma grande facilidade que é definir um padrão de formatação para a saída de data que você deseja.
import java.text.SimpleDateFormat; import java.util.Date; public class Exemplo009 { public static void main(String[] args) { Date agora = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String dataFormatada = formatter.format(agora); System.out.println(dataFormatada); // 06/04/2021 } }
Datas no Java 8+
O Java 8 veio com uma série de novidades para facilitar o trabalho com Datas.
E a grande melhoria está no pacote java.time que foi herdado do projeto Joda Time.
Trabalhar com datas nunca foi tão fácil com esse novo pacote.
Nele destacam-se três classes:
- LocalDate
- LocalTime
- LocalDateTime
Basicamente, o que tínhamos até então eram as classes que vimos até agora: Date e Calendar.
Com o uso constante, elas se mostraram confusas e trabalhosas, além de serem mutáveis.
LocalDate é uma classe imutável para representar uma data.
Seu formato padrão é yyyy-MM-dd
import java.time.LocalDate; public class Exemplo010 { public static void main(String[] args) { LocalDate hoje = LocalDate.now(); System.out.println(hoje); // 2021-04-06 } }
import java.time.LocalDate; // Exemplo de como manipular LocalDate public class Exemplo011 { public static void main(String[] args) { LocalDate hoje = LocalDate.now(); LocalDate ontem = hoje.minusDays(1); System.out.println(hoje); // 2021-04-06 System.out.println(ontem); // 2021-04-05 } }
LocalTime é uma classe imutável que representa um padrão de hora-minuto-segundo.
LocalTime pode ser representado até o nível de nanosegundos. Exemplo: 12:22:10.123212345
Sua utilização é similar ao LocalDate.
import java.time.LocalTime; // Exemplo de como utilizar LocalTime public class Exemplo012 { public static void main(String[] args) { LocalTime agora = LocalTime.now(); System.out.println(agora); // 21:36:06.117315525 } }
import java.time.LocalTime; // Exemplo de como manipular LocalTime public class Exemplo013 { public static void main(String[] args) { LocalTime agora = LocalTime.now(); System.out.println(agora); // 21:36:06.117315525 LocalTime maisUmaHora = agora.plusHours(1); System.out.println(maisUmaHora); // 22:36:06.117315525 } }
LocalDateTime funciona como uma espécie de junção entre o LocalTime e o LocalDate.
Também é uma classe imutável e você consegue trabalhar com dia e hora de uma só vez.
Você pode manipular a data e hora com precisão de nanosegundos. Exemplo: 2nd October 2007 at 13:45:30.123456789
import java.time.LocalDateTime; // Exemplo de como manipular LocalDateTime public class Exemplo014 { public static void main(String[] args) { LocalDateTime agora = LocalDateTime.now(); System.out.println(agora); // 2021-04-06T21:42:00.873047743 LocalDateTime futuro = agora.plusHours(1).plusDays(2).plusSeconds(12); System.out.println(futuro); // 2021-04-08T22:42:12.873047743 } }
Faça parte da nossa comunidade!
Domine as tecnologias utilizadas pelas empresas mais inovadoras do mundo e encare seu novo desafio profissional, evoluindo em comunidade com os melhores experts.