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.