Java - Data e hora
Java fornece o Date classe disponível em java.util pacote, esta classe encapsula a data e hora atuais.
A classe Date oferece suporte a dois construtores, conforme mostrado na tabela a seguir.
Sr. Não. | Construtor e descrição |
---|---|
1 | Date( ) Este construtor inicializa o objeto com a data e hora atuais. |
2 | Date(long millisec) Este construtor aceita um argumento igual ao número de milissegundos decorridos desde a meia-noite de 1º de janeiro de 1970. |
A seguir estão os métodos da classe de data.
Sr. Não. | Método e Descrição |
---|---|
1 | boolean after(Date date) Retorna verdadeiro se o objeto de chamada Date contiver uma data posterior à especificada por data; caso contrário, retorna falso. |
2 | boolean before(Date date) Retorna verdadeiro se o objeto Date de chamada contiver uma data anterior à especificada por data; caso contrário, retorna falso. |
3 | Object clone( ) Duplica o objeto Date de chamada. |
4 | int compareTo(Date date) Compara o valor do objeto de chamada com o de data. Retorna 0 se os valores forem iguais. Retorna um valor negativo se o objeto de chamada for anterior à data. Retorna um valor positivo se o objeto de chamada for posterior à data. |
5 | int compareTo(Object obj) Opera de forma idêntica a compareTo (Date) se obj for da classe Date. Caso contrário, ele lança uma ClassCastException. |
6 | boolean equals(Object date) Retorna verdadeiro se o objeto de invocação Date contém a mesma hora e data que aquele especificado por data; caso contrário, retorna falso. |
7 | long getTime( ) Retorna o número de milissegundos decorridos desde 1º de janeiro de 1970. |
8 | int hashCode( ) Retorna um código hash para o objeto de chamada. |
9 | void setTime(long time) Define a hora e a data conforme especificado por time, que representa um tempo decorrido em milissegundos a partir da meia-noite de 1º de janeiro de 1970. |
10 | String toString( ) Converte o objeto de chamada Date em uma string e retorna o resultado. |
Obtendo data e hora atuais
Este é um método muito fácil de obter a data e a hora atuais em Java. Você pode usar um objeto Date simples com o método toString () para imprimir a data e hora atuais da seguinte forma -
Exemplo
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
Isso produzirá o seguinte resultado -
Resultado
on May 04 09:51:52 CDT 2009
Comparação de Data
A seguir estão as três maneiras de comparar duas datas -
Você pode usar getTime () para obter o número de milissegundos decorridos desde a meia-noite de 1º de janeiro de 1970 para ambos os objetos e, em seguida, comparar esses dois valores.
Você pode usar os métodos before (), after () e equals (). Como o 12º dia do mês vem antes do 18º, por exemplo, new Date (99, 2, 12) .before (new Date (99, 2, 18)) retorna true.
Você pode usar o método compareTo (), que é definido pela interface Comparable e implementado por Date.
Formatação de data usando SimpleDateFormat
SimpleDateFormat é uma classe concreta para formatar e analisar datas de uma maneira que diferencia a localidade. SimpleDateFormat permite que você comece escolhendo quaisquer padrões definidos pelo usuário para a formatação de data e hora.
Exemplo
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
Isso produzirá o seguinte resultado -
Resultado
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
Códigos de formato simples de DateFormat
Para especificar o formato da hora, use uma string de padrão de hora. Neste padrão, todas as letras ASCII são reservadas como letras padrão, que são definidas da seguinte forma -
Personagem | Descrição | Exemplo |
---|---|---|
G | Designador era | DE ANÚNCIOS |
y | Ano em quatro dígitos | 2001 |
M | Mês no ano | Julho ou 07 |
d | Dia no mês | 10 |
h | Hora em AM / PM (1 ~ 12) | 12 |
H | Hora do dia (0 ~ 23) | 22 |
m | Minuto em hora | 30 |
s | Segundo em minuto | 55 |
S | Milissegundo | 234 |
E | Dia da semana | terça |
D | Dia no ano | 360 |
F | Dia da semana no mês | 2 (segunda quarta-feira em julho) |
W | Semana no ano | 40 |
W | Semana no mês | 1 |
uma | Marcador AM / PM | PM |
k | Hora do dia (1 ~ 24) | 24 |
K | Hora em AM / PM (0 ~ 11) | 10 |
z | Fuso horário | Hora Padrão do Leste |
' | Escape para texto | Delimitador |
" | Citação única | ` |
Formatação de data usando printf
A formatação de data e hora pode ser feita facilmente usando printfmétodo. Você usa um formato de duas letras, começando comt e terminando em uma das letras da tabela conforme mostrado no código a seguir.
Exemplo
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
}
Isso produzirá o seguinte resultado -
Resultado
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Seria um pouco bobo se você tivesse que fornecer a data várias vezes para formatar cada parte. Por esse motivo, uma string de formato pode indicar o índice do argumento a ser formatado.
O índice deve seguir imediatamente o% e deve ser encerrado por um $.
Exemplo
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
Isso produzirá o seguinte resultado -
Resultado
Due date: February 09, 2004
Alternativamente, você pode usar o sinalizador <. Indica que o mesmo argumento da especificação de formato anterior deve ser usado novamente.
Exemplo
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display formatted date
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
Isso produzirá o seguinte resultado -
Resultado
Due date: February 09, 2004
Caracteres de conversão de data e hora
Personagem | Descrição | Exemplo |
---|---|---|
c | Data e hora completas | Seg, 04 de maio, 09:51:52 CDT de 2009 |
F | Data ISO 8601 | 09/02/2004 |
D | Data formatada nos EUA (mês / dia / ano) | 09/02/2004 |
T | Tempo de 24 horas | 18:05:19 |
r | Tempo de 12 horas | 18:05:19 |
R | Tempo de 24 horas, sem segundos | 18:05 |
Y | Ano de quatro dígitos (com zeros à esquerda) | 2004 |
y | Últimos dois dígitos do ano (com zeros à esquerda) | 04 |
C | Os primeiros dois dígitos do ano (com zeros à esquerda) | 20 |
B | Nome completo do mês | fevereiro |
b | Nome abreviado do mês | Fev |
m | Mês de dois dígitos (com zeros à esquerda) | 02 |
d | Dia de dois dígitos (com zeros à esquerda) | 03 |
e | Dia de dois dígitos (sem zeros à esquerda) | 9 |
UMA | Nome completo do dia da semana | Segunda-feira |
uma | Nome abreviado do dia da semana | seg |
j | Dia do ano com três dígitos (com zeros à esquerda) | 069 |
H | Hora de dois dígitos (com zeros à esquerda), entre 00 e 23 | 18 |
k | Hora de dois dígitos (sem zeros à esquerda), entre 0 e 23 | 18 |
Eu | Hora de dois dígitos (com zeros à esquerda), entre 01 e 12 | 06 |
eu | Hora de dois dígitos (sem zeros à esquerda), entre 1 e 12 | 6 |
M | Minutos de dois dígitos (com zeros à esquerda) | 05 |
S | Segundos de dois dígitos (com zeros à esquerda) | 19 |
eu | Milissegundos de três dígitos (com zeros à esquerda) | 047 |
N | Nanossegundos de nove dígitos (com zeros à esquerda) | 047000000 |
P | Marcador de manhã ou tarde em maiúsculas | PM |
p | Marcador de manhã ou tarde em caixa baixa | PM |
z | Deslocamento numérico RFC 822 do GMT | -0800 |
Z | Fuso horário | PST |
s | Segundos desde 01/01/1970 00:00:00 GMT | 1078884319 |
Q | Milissegundos desde 01/01/1970 00:00:00 GMT | 1078884319047 |
Existem outras classes úteis relacionadas a Data e hora. Para obter mais detalhes, você pode consultar a documentação do Java Standard.
Analisando Strings em Datas
A classe SimpleDateFormat tem alguns métodos adicionais, notavelmente parse (), que tenta analisar uma string de acordo com o formato armazenado no objeto SimpleDateFormat fornecido.
Exemplo
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
Uma execução de amostra do programa acima produziria o seguinte resultado -
Resultado
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Dormindo um pouco
Você pode dormir por qualquer período de tempo de um milissegundo até a vida útil do seu computador. Por exemplo, o seguinte programa iria dormir por 3 segundos -
Exemplo
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Isso produzirá o seguinte resultado -
Resultado
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
Medindo o tempo decorrido
Às vezes, você pode precisar medir um ponto no tempo em milissegundos. Então, vamos reescrever o exemplo acima mais uma vez -
Exemplo
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Isso produzirá o seguinte resultado -
Resultado
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993
Classe GregorianCalendar
GregorianCalendar é uma implementação concreta de uma classe Calendar que implementa o calendário gregoriano normal com o qual você está familiarizado. Não discutimos a classe Calendar neste tutorial, você pode consultar a documentação Java padrão para isso.
o getInstance( )O método Calendar retorna um GregorianCalendar inicializado com a data e hora atuais no local e fuso horário padrão. GregorianCalendar define dois campos: AD e BC. Estes representam as duas eras definidas pelo calendário gregoriano.
Existem também vários construtores para objetos GregorianCalendar -
Sr. Não. | Construtor e descrição |
---|---|
1 | GregorianCalendar() Constrói um GregorianCalendar padrão usando a hora atual no fuso horário padrão com o local padrão. |
2 | GregorianCalendar(int year, int month, int date) Constrói um GregorianCalendar com a data fornecida definida no fuso horário padrão com o local padrão. |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) Constrói um GregorianCalendar com a data e hora fornecidas definidas para o fuso horário padrão com o local padrão. |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Constrói um GregorianCalendar com a data e hora fornecidas definidas para o fuso horário padrão com o local padrão. |
5 | GregorianCalendar(Locale aLocale) Constrói um GregorianCalendar com base na hora atual no fuso horário padrão com a localidade fornecida. |
6 | GregorianCalendar(TimeZone zone) Constrói um GregorianCalendar com base na hora atual no fuso horário fornecido com a localidade padrão. |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) Constrói um GregorianCalendar com base na hora atual no fuso horário fornecido com a localidade fornecida. |
Aqui está a lista de alguns métodos de suporte úteis fornecidos pela classe GregorianCalendar -
Sr. Não. | Método e Descrição |
---|---|
1 | void add(int field, int amount) Adiciona a quantidade de tempo especificada (assinada) ao campo de tempo determinado, com base nas regras do calendário. |
2 | protected void computeFields() Converte UTC em milissegundos em valores de campo de hora. |
3 | protected void computeTime() Substitui o calendário Converte os valores do campo de tempo em UTC como milissegundos. |
4 | boolean equals(Object obj) Compara este GregorianCalendar a uma referência de objeto. |
5 | int get(int field) Obtém o valor de um determinado campo de hora. |
6 | int getActualMaximum(int field) Retorna o valor máximo que este campo poderia ter, dada a data atual. |
7 | int getActualMinimum(int field) Retorna o valor mínimo que este campo poderia ter, dada a data atual. |
8 | int getGreatestMinimum(int field) Retorna o valor mínimo mais alto para o campo fornecido se variar. |
9 | Date getGregorianChange() Obtém a data de alteração do calendário gregoriano. |
10 | int getLeastMaximum(int field) Retorna o valor máximo mais baixo para o campo fornecido se variar. |
11 | int getMaximum(int field) Retorna o valor máximo para o campo fornecido. |
12 | Date getTime() Obtém a hora atual deste calendário. |
13 | long getTimeInMillis() Obtém a hora atual deste calendário como um longo. |
14 | TimeZone getTimeZone() Obtém o fuso horário. |
15 | int getMinimum(int field) Retorna o valor mínimo para o campo fornecido. |
16 | int hashCode() Substitui hashCode. |
17 | boolean isLeapYear(int year) Determina se o ano especificado é um ano bissexto. |
18 | void roll(int field, boolean up) Adiciona ou subtrai (para cima / para baixo) uma única unidade de tempo no campo de tempo fornecido sem alterar campos maiores. |
19 | void set(int field, int value) Define o campo de hora com o valor fornecido. |
20 | void set(int year, int month, int date) Define os valores para os campos ano, mês e data. |
21 | void set(int year, int month, int date, int hour, int minute) Define os valores para os campos ano, mês, data, hora e minuto. |
22 | void set(int year, int month, int date, int hour, int minute, int second) Define os valores para os campos ano, mês, data, hora, minuto e segundo. |
23 | void setGregorianChange(Date date) Define a data de alteração GregorianCalendar. |
24 | void setTime(Date date) Define a hora atual deste calendário com a data fornecida. |
25 | void setTimeInMillis(long millis) Define a hora atual deste calendário a partir de um valor longo fornecido. |
26 | void setTimeZone(TimeZone value) Define o fuso horário com o valor de fuso horário fornecido. |
27 | String toString() Retorna uma representação de string deste calendário. |
Exemplo
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};
int year;
// Create a Gregorian calendar initialized
// with the current date and time in the
// default locale and timezone.
GregorianCalendar gcalendar = new GregorianCalendar();
// Display current time and date information.
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// Test if the current year is a leap year
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
}else {
System.out.println("The current year is not a leap year");
}
}
}
Isso produzirá o seguinte resultado -
Resultado
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
Para uma lista completa de constantes disponíveis na classe Calendar, você pode consultar a documentação Java padrão.