1. Date
aula e hora do Unix
Desde o início de Java, a linguagem tem uma classe especial para trabalhar com horas e datas — Date
. Com o tempo, várias outras classes para trabalhar com datas apareceram, mas os programadores continuam usando a Date
classe até hoje.
Isso ocorre porque é muito simples e conveniente. E como programador, você definitivamente o encontrará em qualquer projeto real. Usar ou não é uma escolha sua, mas você deve saber. Então dê a ele alguns minutos do seu precioso tempo.
O que torna a Date
aula tão boa? Sua simplicidade.
A Date
classe armazena informações de data e hora como o número de milissegundos decorridos desde 1º de janeiro de 1970. São muitos milissegundos, portanto, o long
tipo é usado para armazená-los.
Por que desde 1970 especificamente? Este é o chamado tempo Unix : é como o sistema operacional Unix, que é o avô de todos os sistemas operacionais modernos, marca o tempo.
Mas você pode descobrir com muita facilidade quanto tempo se passou entre duas datas: basta subtrair uma data da outra e obter a diferença de tempo entre as datas até o milissegundo mais próximo.
Aqui estão alguns exemplos úteis de como trabalhar com a Date
classe.
2. Obtendo a data atual
Para obter a hora e a data atuais, basta criar um Date
objeto. Cada novo objeto armazena a hora em que foi criado. Parece muito simples:
Date current = new Date();
Depois de executar este comando, a current
variável armazenará uma referência ao Date
objeto criado, que armazenará internamente o tempo de sua criação — o número de milissegundos decorridos desde 1º de janeiro de 1970.
Exibindo a data atual na tela
Para exibir a data atual, basta: a) criar um novo Date
objeto, b) imprimi-lo na tela usando o System.out.println()
método .
Exemplo:
Código | Saída do console |
---|---|
|
|
Aqui está o que a saída do console significa:
Texto | Interpretação |
---|---|
quinta -feira | Quinta-feira |
21 de fevereiro | 21 de fevereiro |
14:01:34 | horas: minutos: segundos |
EET | Fuso horário: Horário da Europa Oriental |
2019 | Ano |
3. Definindo uma data específica
Descobrimos como obter a hora atual, mas como criamos um Date
objeto que armazena uma data ou hora diferente?
Novamente, tudo é simples aqui. Para definir uma data específica, você precisa escrever um código como este:
Date birthday = new Date(year, month, day);
Tudo é simples e óbvio, mas há duas nuances a serem observadas:
- O ano deve ser contado a partir de 1900.
- Os meses são numerados a partir do zero.
Este é outro legado do sistema operacional Unix: no Unix, os programadores indicavam o ano usando dois dígitos. Em vez de 1977, eles simplesmente escreveram 77. Portanto, 77 é o ano correto se contarmos a partir de 1900.
Por exemplo, nasci em 21 de março de 1989. Março é o terceiro mês, então preciso escrever:
Código | Saída do console |
---|---|
|
|
Os meses são numerados a partir do zero, mas os dias não. Isso é um pouco estranho, certo?
Achamos que os verdadeiros programadores deveriam ter prevalecido e numerado os dias do mês a partir do zero também. Oh, esses conformistas 🙂
Definindo um horário específico
Definir um horário específico também é bastante simples: para isso, você precisa escrever uma declaração como esta:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Horas, minutos e segundos são numerados a partir do zero: deixe o programador dentro de você respirar aliviado.
Exemplo:
Código | Saída do console |
---|---|
|
|
Marcamos a hora 12h15 e a data 4 de junho de 2005 . Isso é um pouco difícil para um não programador ler, mas funciona como deveria.
4. Trabalhando com elementos de uma data
Você pode fazer mais com um Date
objeto do que apenas exibi-lo. Possui métodos que permitem obter elementos individuais da data armazenada internamente:
Método | Descrição |
---|---|
|
Retorna o ano da data relativo a 1900. |
|
Retorna o mês da data (os meses são numerados a partir de zero) |
|
Retorna o dia do mês |
|
Retorna o dia da semana |
|
Retorna as horas |
|
Retorna os minutos |
|
Retorna os segundos |
Exemplo:
Código | Saída do console | Observação |
---|---|---|
|
|
2005 junho dia do mês sábado |
A propósito, um Date
objeto não apenas permite obter elementos individuais de uma data, mas também alterá-los:
Método | Descrição |
---|---|
void setYear(int year) |
Altera o ano da data. O ano é indicado em relação a 1900. |
void setMonth(int month) |
Altera o mês da data (os meses são numerados a partir de zero) |
void setDate(int date) |
Muda o dia do mês |
void setHours(int hours) |
Muda o horário |
void setMinutes(int minutes) |
Minutos de alterações |
void setSeconds(int seconds) |
Muda os segundos |
5. Milissegundos
Como dissemos anteriormente, o Date
objeto armazena o número de milissegundos decorridos desde 1º de janeiro de 1970.
Se precisarmos desse número, podemos obtê-lo do Date
objeto:
long time = date.getTime();
O getTime()
método retorna o número de milissegundos armazenados dentro do Date
objeto.
Você não apenas pode obter o número de milissegundos, mas também pode alterar esse número em um objeto existente:
Date date = new Date();
date.setTime(1117876500000L);
A propósito, você pode escrever isso de forma ainda mais concisa passando o tempo para o Date
objeto logo que ele é criado:
Date date = new Date(1117876500000L);
6. Comparação de datas
Se você quiser comparar duas datas e descobrir qual veio primeiro, você tem três opções
A primeira maneira é simplesmente comparar o número de milissegundos que cada um armazena:
if (date1.getTime() < date2.getTime())
A segunda maneira é usar o before()
método de um Date
objeto:
if (date1.before(date2))
Fica assim: se date1
vem antes de date2
, então...
A terceira maneira é usar o after()
método de um Date
objeto:
if (date2.after(date1))
Fica assim: se date2
for depois de date1
, então...
7. DateFormat
aula
Lembre-se, quando exibimos a data na tela, vimos algo assim: Thu Feb 21 14:01:34 EET 2019
. Tudo parece correto, mas o formato é mais como uma data seria exibida para programadores do que para humanos normais. Queremos exibir a data de forma mais clara para os usuários. Algo como Tuesday, February 21
.
E sem o ano. Ou com um ano, se necessário. Em geral, queremos poder exibir a data de maneiras diferentes.
Existe uma aula especial para isso: SimpleDateFormat
.
Exemplo:
Código |
---|
|
Saída do console |
|
Olha o que o programa exibiu: Jun-04-2005
. Isso não é nada do que costumava ser.
A diferença é que exibimos não o Date
objeto em si, mas uma string especial obtida chamando o format()
método em um SimpleDateFormat
objeto. Mas esse nem é o ponto principal aqui.
Quando o SimpleDateFormat
objeto foi criado, passamos a string "MMM-dd-YYYY"
como parâmetro. É essa string que transmite o formato de data que finalmente vimos na saída do console.
- MMM indica para exibir o nome do mês, abreviado usando três letras
- dd indica para exibir o dia do mês
- YYYY indica para exibir o ano usando quatro dígitos
Se quisermos exibir o mês como números, em vez de MMM
, precisamos escrever MM
, o que resulta no padrão "MM-dd-YYYY"
. A saída da tela será06-04-2005
Discutiremos essa classe com mais detalhes posteriormente.
8. Date.parse
método
A Date
classe pode fazer algo mais interessante e útil — pode obter uma data de uma string. Ou, como dizem os programadores, pode analisar uma string.
Tem o parse()
método especial para isso. A análise fica assim:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
A propósito, este código pode ser escrito de forma mais compacta:
Date date = new Date("Jul 06 12:15:00 2019");
Consideraremos a análise de strings com mais detalhes em outras lições.
GO TO FULL VERSION