Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Dominando Data e Hora em Java: Construtores, Métodos e Boas Práticas

O Java fornece a classe Date disponível no pacote java.util, que encapsula a data e hora atuais.

A classe Date suporta dois construtores, conforme mostrado na tabela a seguir.

Nº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 Date.

NºMétodo e Descrição
1

boolean after(Date date)

Retorna true se o objeto Date invocador contém uma data posterior à especificada por date; caso contrário, retorna false.

2

boolean before(Date date)

Retorna true se o objeto Date invocador contém uma data anterior à especificada por date; caso contrário, retorna false.

3

Object clone()

Duplica o objeto Date invocador.

4

int compareTo(Date date)

Compara o valor do objeto invocador com o de date. Retorna 0 se os valores forem iguais. Retorna um valor negativo se o objeto invocador for anterior a date. Retorna um valor positivo se o objeto invocador for posterior a date.

5

int compareTo(Object obj)

Opera de forma idêntica a compareTo(Date) se obj for da classe Date. Caso contrário, lança uma ClassCastException.

6

boolean equals(Object date)

Retorna true se o objeto Date invocador contém a mesma hora e data que a especificada por date; caso contrário, retorna false.

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 invocador.

9

void setTime(long time)

Define a hora e data conforme especificado por time, que representa um tempo decorrido em milissegundos desde a meia-noite de 1º de janeiro de 1970.

10

String toString()

Converte o objeto Date invocador em uma string e retorna o resultado.

Obtendo Data e Hora Atuais

Esta é uma maneira muito fácil de obter a data e 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[]) {
        // Instancia um objeto Date
        Date date = new Date();
        // Exibe hora e data usando toString()
        System.out.println(date.toString());
    }
}

Isso produzirá o seguinte resultado:

Saída

em 04 de Mai 09:51:52 CDT 2009

Comparação de Datas

A seguir estão as três maneiras de comparar duas datas:

Formatação de Data Usando SimpleDateFormat

SimpleDateFormat é uma classe concreta para formatar e analisar datas de maneira sensível ao locale. O SimpleDateFormat permite que você comece escolhendo quaisquer padrões definidos pelo usuário para formatação de data-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 'às' hh:mm:ss a zzz");
        System.out.println("Data Atual: " + ft.format(dNow));
    }
}

Isso produzirá o seguinte resultado:

Saída

Data Atual: Dom 2004.07.18 às 04:14:09 PM PDT

Códigos de Formato SimpleDateFormat

Para especificar o formato de hora, use uma string de padrão de tempo. Neste padrão, todas as letras ASCII são reservadas como letras de padrão, definidas da seguinte forma:

CaractereDescriçãoExemplo
GDesignador de eraDC
yAno em quatro dígitos2001
MMês no anoJulho ou 07
dDia no mês10
hHora em A.M./P.M. (1~12)12
HHora no dia (0~23)22
mMinuto na hora30
sSegundo no minuto55
SMilissegundo234
EDia na semanaTerça-feira
DDia no ano360
FDia da semana no mês2 (segunda Qua. em Julho)
wSemana no ano40
WSemana no mês1
aMarcador A.M./P.M.PM
kHora no dia (1~24)24
KHora em A.M./P.M. (0~11)10
zFuso horárioHorário Padrão do Leste
'Escape para textoDelimitador
"Aspas simples`

Formatação de Data Usando printf

A formatação de data e hora pode ser feita facilmente usando o método printf. Você usa um formato de duas letras, começando com t e terminando em uma das letras da tabela, como mostrado no código a seguir.

Exemplo

import java.util.Date;
public class DateDemo {
    public static void main(String args[]) {
        // Instancia um objeto Date
        Date date = new Date();
        // Exibe hora e data
        String str = String.format("Data/Hora Atual: %tc", date);
        System.out.printf(str);
    }
}

Isso produzirá o seguinte resultado:

Saída

Data/Hora Atual: Sáb 15 Dez 16:37:57 MST 2012

Seria um pouco tolo 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 terminado por um $.

Exemplo

import java.util.Date;
public class DateDemo {
    public static void main(String args[]) {
        // Instancia um objeto Date
        Date date = new Date();
        // Exibe data formatada
        System.out.printf("%1$s %2$tB %2$td, %2$tY", "Data de vencimento:", date);
    }
}

Isso produzirá o seguinte resultado:

Saída

Data de vencimento: Fevereiro 09, 2004

Alternativamente, você pode usar a flag <. Ela 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[]) {
        // Instancia um objeto Date
        Date date = new Date();
        // Exibe data formatada
        System.out.printf("%s %tB %<te, %<tY", "Data de vencimento:", date);
    }
}

Isso produzirá o seguinte resultado:

Saída

Data de vencimento: Fevereiro 09, 2004

Caracteres de Conversão de Data e Hora

CaractereDescriçãoExemplo
cData e hora completasSeg Mai 04 09:51:52 CDT 2009
FData ISO 86012004-02-09
DData formatada EUA (mês/dia/ano)02/09/2004
THora 24h18:05:19
rHora 12h06:05:19 pm
RHora 24h, sem segundos18:05
YAno de quatro dígitos (com zeros à esquerda)2004
yÚltimos dois dígitos do ano (com zeros à esquerda)04
CPrimeiros dois dígitos do ano (com zeros à esquerda)20
BNome completo do mêsFevereiro
bNome abreviado do mêsFev
mMês de dois dígitos (com zeros à esquerda)02
dDia de dois dígitos (com zeros à esquerda)03
eDia de dois dígitos (sem zeros à esquerda)9
ANome completo do dia da semanaSegunda-feira
aNome abreviado do dia da semanaSeg
jDia do ano de três dígitos (com zeros à esquerda)069
HHora de dois dígitos (com zeros à esquerda), entre 00 e 2318
kHora de dois dígitos (sem zeros à esquerda), entre 0 e 2318
IHora de dois dígitos (com zeros à esquerda), entre 01 e 1206
lHora de dois dígitos (sem zeros à esquerda), entre 1 e 126
MMinutos de dois dígitos (com zeros à esquerda)05
SSegundos de dois dígitos (com zeros à esquerda)19
LMilissegundos de três dígitos (com zeros à esquerda)047
NNanosegundos de nove dígitos (com zeros à esquerda)047000000
PMarcador de manhã/tarde maiúsculoPM
pMarcador de manhã/tarde minúsculopm
zDeslocamento numérico RFC 822 do GMT-0800
ZFuso horárioPST
sSegundos desde 1970-01-01 00:00:00 GMT1078884319
QMilissegundos desde 1970-01-01 00:00:00 GMT1078884319047

Existem outras classes úteis relacionadas a Data e Hora. Para mais detalhes, consulte a documentação padrão do Java.

Analisando Strings em Datas

A classe SimpleDateFormat possui 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 + " Analisado como ");
        Date t;
        try {
            t = ft.parse(input);
            System.out.println(t);
        } catch (ParseException e) {
            System.out.println("Não analisável usando " + ft);
        }
    }
}

Uma execução de exemplo do programa acima produziria o seguinte resultado:

Saída

1818-11-11 Analisado como Qua Nov 11 00:00:00 EST 1818

Pausando a Execução

Você pode pausar por qualquer período de tempo, de um milissegundo até a vida útil do seu computador. Por exemplo, o programa a seguir pausaria 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(3000);
            System.out.println(new Date() + "\n");
        } catch (Exception e) {
            System.out.println("Exceção capturada!");
        }
    }
}

Isso produzirá o seguinte resultado:

Saída

Dom Mai 03 18:04:41 GMT 2009
Dom Mai 03 18:04:44 GMT 2009

Medindo Tempo Decorrido

Às vezes, você pode precisar medir um ponto no tempo em milissegundos. Vamos reescrever o exemplo acima mais uma vez:

Exemplo

import java.util.*;
public class DiffDemo {
    public static void main(String args[]) {
        try {
            long inicio = System.currentTimeMillis();
            System.out.println(new Date() + "\n");
            Thread.sleep(3000);
            System.out.println(new Date() + "\n");
            long fim = System.currentTimeMillis();
            long diff = fim - inicio;
            System.out.println("Diferença é: " + diff);
        } catch (Exception e) {
            System.out.println("Exceção capturada!");
        }
    }
}

Isso produzirá o seguinte resultado:

Saída

Dom Mai 03 18:16:51 GMT 2009
Dom Mai 03 18:16:54 GMT 2009
Diferença é: 3003

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 padrão do Java para isso.

O método getInstance() de Calendar retorna um GregorianCalendar inicializado com a data e hora atuais no locale 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:

NºConstrutor e Descrição
1

GregorianCalendar()

Constrói um GregorianCalendar padrão usando a hora atual no fuso horário padrão com o locale padrão.

2

GregorianCalendar(int year, int month, int date)

Constrói um GregorianCalendar com a data dada definida no fuso horário padrão com o locale padrão.

3

GregorianCalendar(int year, int month, int date, int hour, int minute)

Constrói um GregorianCalendar com a data e hora dadas definidas para o fuso horário padrão com o locale 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 dadas definidas para o fuso horário padrão com o locale padrão.

5

GregorianCalendar(Locale aLocale)

Constrói um GregorianCalendar baseado na hora atual no fuso horário padrão com o locale dado.

6

GregorianCalendar(TimeZone zone)

Constrói um GregorianCalendar baseado na hora atual no fuso horário dado com o locale padrão.

7

GregorianCalendar(TimeZone zone, Locale aLocale)

Constrói um GregorianCalendar baseado na hora atual no fuso horário dado com o locale dado.

Aqui está a lista de alguns métodos de suporte úteis fornecidos pela classe GregorianCalendar:

NºMétodo e Descrição
1

void add(int field, int amount)

Adiciona a quantidade (com sinal) de tempo especificada ao campo de tempo dado, baseado nas regras do calendário.

2

protected void computeFields()

Converte UTC em milissegundos para valores de campo de tempo.

3

protected void computeTime()

Sobrescreve Calendar. Converte valores de campo de tempo para UTC em milissegundos.

4

boolean equals(Object obj)

Compara este GregorianCalendar com uma referência de objeto.

5

int get(int field)

Obtém o valor para um campo de tempo dado.

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 dado se variar.

9

Date getGregorianChange()

Obtém a data de mudança do Calendário Gregoriano.

10

int getLeastMaximum(int field)

Retorna o valor máximo mais baixo para o campo dado se variar.

11

int getMaximum(int field)

Retorna o valor máximo para o campo dado.

12

Date getTime()

Obtém a hora atual deste Calendar.

13

long getTimeInMillis()

Obtém a hora atual deste Calendar como um long.

14

TimeZone getTimeZone()

Obtém o fuso horário.

15

int getMinimum(int field)

Retorna o valor mínimo para o campo dado.

16

int hashCode()

Sobrescreve hashCode.

17

boolean isLeapYear(int year)

Determina se o ano dado é bissexto.

18

void roll(int field, boolean up)

Adiciona ou subtrai (para cima/para baixo) uma única unidade de tempo no campo de tempo dado sem alterar campos maiores.

19

void set(int field, int value)

Define o campo de tempo com o valor dado.

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 mudança do GregorianCalendar.

24

void setTime(Date date)

Define a hora atual deste Calendar com o Date dado.

25

void setTimeInMillis(long millis)

Define a hora atual deste Calendar a partir do valor long dado.

26

void setTimeZone(TimeZone value)

Define o fuso horário com o valor de fuso horário dado.

27

String toString()

Retorna uma representação em string deste calendário.

Exemplo

import java.util.*;
public class GregorianCalendarDemo {
    public static void main(String args[]) {
        String meses[] = {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"};
        int ano;
        // Cria um calendário gregoriano inicializado
        // com a data e hora atuais no
        // locale e fuso horário padrão.
        GregorianCalendar gcalendar = new GregorianCalendar();
        // Exibe informações de data e hora atuais.
        System.out.print("Data: ");
        System.out.print(meses[gcalendar.get(Calendar.MONTH)]);
        System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
        System.out.println(ano = gcalendar.get(Calendar.YEAR));
        System.out.print("Hora: ");
        System.out.print(gcalendar.get(Calendar.HOUR) + ":");
        System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
        System.out.println(gcalendar.get(Calendar.SECOND));
        // Testa se o ano atual é bissexto
        if(gcalendar.isLeapYear(ano)) {
            System.out.println("O ano atual é bissexto");
        } else {
            System.out.println("O ano atual não é bissexto");
        }
    }
}

Isso produzirá o seguinte resultado:

Saída

Data: Abr 22 2009 Hora: 11:25:27 O ano atual não é bissexto

Para uma lista completa de constantes disponíveis na classe Calendar, consulte a documentação padrão do Java.


Java

  1. Classes e Objetos em C#: Fundamentos para POO Robusta
  2. Obter Data e Hora Atuais em Python: Guia Prático
  3. Variáveis e Literais em Java: Guia Completo
  4. Entendendo Expressões, Instruções e Blocos em Java
  5. Classes e Objetos em Java: Guia Prático
  6. Classes e Métodos Abstratos em Java: Guia Completo
  7. Dominando Classes Aninhadas e Internas em Java: Tipos, Exemplos e Boas Práticas
  8. Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
  9. Java throw vs throws: Dominando Tratamento de Exceções com Exemplos Práticos
  10. Dominando Autoboxing e Unboxing em Java: Exemplos Práticos e Boas Práticas