Handerson Ferreira Gomes

Programação

Trabalhando com datas em Java

15 de agosto de 2000, 00:00

Programação: veja como classes de Java resolvem o problema da apresentação de datas para o usuário, onde ele estiver no mundo.

Por Handerson Ferreira Gomes

Um das coisas mais trabalhosas em qualquer linguagem de programação são as datas. Aquelas que usam bancos de dados então pedem sacrifício maior ainda. Formatar a saída destes dados também pode ser um problema quando a formatação depende do local do usuário – ou seja, na internet estamos falando do mundo inteiro.

A linguagem Java fornece classes que oferecem um bom conjunto de métodos para manipular o tratamento de datas para sua apresentação. Apesar deste ser um tópico resolvido pelo Java desde a versão 1.1 e já ter sido discutido outras vezes, sempre é bom relembrar e ver como estas poderosas classes podem auxiliar em seus sistema.

O principais objetos para manipulação de datas pertencem aos pacotes java.util e java.text.

São eles:
java.util.Date
java.text.DateFormat
java.text.SimpleDateFormat

A classe Date representa a data corrente do sistema, em sua forma mais nativa. A classe DateFormat é abstrata e fornece métodos para manipular a formatação de datas variando a forma de apresentação, indo de curta a longa, e sensitivo ao local do usuário.

A classe SimpleDateFormat é uma classe concreta, subclasse de DateFormat e tem métodos concretos para formatar e fazer parse de data de forma sensitiva.

Para instanciar um objeto Date é muito simples:
Date hoje = new Date();
System.out.println ("A data de hoje é: "+ hoje);

A saída de execução deste programa será:
A data de hoje é: Mon Aug 14 22:45:20 GMT–03:00 2000

Perceba que nesta simples data você tem diversas informações como dia da semana (Mon), mês (Aug) dia, hora e outras informações como o timezone.

Para formatar a representação de um objeto Date podemos utilizar a classe SimpleDateFormat.Esta classe fornece um conjunto de caracteres padrão para formatação do objeto Date. Veja abaixo uma cópia retirada da documentação do Java onde cada campo de uma data tem uma representação String.


Símbolo Significado Apresentação Exemplo
G era designator (Text) AD
y year (Number) 1996
M month in year (Text & Number) July & 07
d day in month (Number) 10
h hour in am/pm (1~12) (Number) 12
H hour in day (0~23) (Number) 0
m minute in hour (Number) 30
s second in minute (Number) 55
S millisecond (Number) 978
E day in week (Text) Tuesday
D day in year (Number) 189
F day of week in month (Number) 2 (2nd Wed in July)
w week in year (Number) 27
W week in month (Number) 2
a am/pm marker (Text) PM
k hour in day (1~24) (Number) 24
K hour in am/pm (0~11) (Number) 0
z time zone (Text) Pacific Standard Time
escape for text (Delimiter)
single quote (Literal)

Podemos citar alguns exemplos de formatações de datas:
dd/MM/yy = 25/05/00
dd/MMM/yyyy = 25/MAI/2000

Até 3 dígitos você tem um valor resumido, acima de quatro a representação de strings é sem abreviação.

Neste exemplo abaixo você pode conferir como é simples utilizar o objeto SimpleDateFormat para melhorar a saída dos seus programas Java:

String formato = "dd/MM/yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(formato);
System.out.println("A data formatada é: "+ formatter.format(hoje));
formatter = new SimpleDateFormat("EEEE, dd de MMMM de yyyy");
System.out.println("Ou, hoje é: "+ formatter.format(hoje));

A saída da execução deste programa é:
A data de hoje é: Mon Aug 14 23:22:56 GMT–03:00 2000
A data formatada é: 14/08/2000
Ou, hoje é: Segunda–feira, 14 de Agosto de 2000

A classe SimpleDate pode ser usada para formatar automaticamente a representação de um objeto Date para a data do seu usuário internet.

O fragmento de código abaixo apresenta a utilização desta Classe:

Locale brasil = new Locale ("pt","BR");
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, brasil);
System.out.println("Hoje no Brasil: "+ df.format(hoje));
df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
System.out.println("Aujourdhui au France: "+ df.format(hoje));
df = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
System.out.println("Today in USA: "+ df.format(hoje));

Após criarmos um objeto Locale que representa o Brasil podemos instanciar um objeto DateFormat e utilizar os métodos para formatação sensitiva a localidade.O resultado desta porção deste programa é:

Hoje no Brasil: 15 de Agosto de 2000
Aujourdhui au France: 15 août 2000
Today in USA: August 15, 2000

Abaixo você tem o exemplo completo deste programa, numa versão um pouco melhorada. Na próxima dica você conhecerá métodos muito úteis para aplicações que precisam calcular datas de entregas baseadas em períodos, adicionar 15 dias numa data por exemplo, ou saber qual é o último dia deste mês, além de poder converter datas em String para objetos Date. Nos vemos aqui, no [web insider], na próxima dica.


import java.util.*;
import java.text.*;
import java.awt.*;

public class UsingDate extends Frame
{
public UsingDate()
{
super("Manipulando Datas com Java");
this.setSize(500,400);
TextArea result = new TextArea();
result.setEditable(false);
Date hoje = new Date();
result.append(""+"A data de hoje sem formatação é: "+ hoje);
String formato = "dd/MM/yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(formato);
result.append(""+"A data formatada é: "+ formatter.format(hoje));
formatter = new SimpleDateFormat("EEEE, dd de MMMM de yyyy");
result.append(""+"Ou, hoje é: "+ formatter.format(hoje));
Locale brasil = new Locale ("pt","BR");
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, brasil);
result.append(""+"Hoje no Brasil: "+ df.format(hoje));
df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
result.append(""+"Aujourdhui au France: "+ df.format(hoje));
df = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
result.append(""+"Today in USA: "+ df.format(hoje));
add(result);
this.show();
}
public static void main(String arg[])
{
new UsingDate();
}
}

[web insider]

Avalie o artigo:
RuimRegularBomÓtimoExcelente (2 voto, average: 5,00 out of 5)
Loading ... Loading ...
Sobre o Autor:

Handerson Ferreira Gomes (handerson.gomes@summa-tech.com) é consultor senior da Summa Technologies nos Estados Unidos.

Palavras-chave relacionadas a este texto: [formulários] [Mobile]



Deixe um Comentário







Comentários

18 comentário(s)


[ 1º ]
raghy

Data : 03/01/2012 às 04:40
Cidade:
Atividade:

bacana, já tinha estudado, mas havia esquecido e não tenho livros sobre o assunto. foi muito útil. valeu.

pretendo montar um despertador em java, como função, principal, cozinhar por exemplo. ao deixar um feijão no fogo, podemos ligar nosso despertador java no micro mesmo para nos avisar, que ele já está pronto, daqui a meia hora por exemplo.

isto pode evitar um incendio.

não que não tenha despertador, mas acho interessante praticar e fazer um para o computador. grato.

se interessar , posto o resultado.

[ 2º ]
Junior

Data : 26/04/2011 às 01:01
Cidade:
Atividade:

Ótimo!!! Me ajudou bastante. Deus te abençoe.

[ 3º ]
Wesley

Data : 12/12/2010 às 02:26
Cidade:
Atividade:

Muito bom o post. Me ajudou bastante!
Obrigado...

[ 4º ]
Ô_Ô Fernando

Data : 06/07/2010 às 14:40
Cidade:
Atividade:

PARABENSSS

MUITO BOM ESSE POST...

SIMPLES E OBJETIVO.
FACIL DE DE SER ENTENDIDO...


ATT,

[ 5º ]
Dêmora Bruna

Data : 05/07/2010 às 17:06
Cidade:
Atividade:

Gostei muito. Bem simples e claro. Aprendi bastante, foi bem útil para mim

[ 6º ]
VICTOR NHONE

Data : 20/06/2010 às 13:59
Cidade:
Atividade:

Lol. você è o maximo Handerson estava muito preucupado com esta classe de formato de datas e tempo, escreva mais. Victor

Data : 02/03/2009 às 01:17
Cidade:
Atividade:

De maaais, sem dúvidas data é um ícone bem trabalhoso da programação. Aprendi muito nesse
documentario.

Obrigado

[ 8º ]
Carla Prado

Data : 09/11/2008 às 15:31
Cidade:
Atividade:

Muito interessante o artigo, além de me apresentar a classe que não conhecia, esclareceu melhor do que a documentação da Sun, muitas vezes confusa e boa para quem já conhece a classe.
Como alguns comentaram, estava justamente procurando pela segunda parte do artigo, pois tenho um projeto da faculdade para acompanhar mercado financeiro e preciso de datas posteriores para calcular rendimentos de poupança e afins.

Adorei o site e o artigo, parabéns para todos! Adicionei aos favoritos!

[ 9º ]
Jocil Alves

Data : 29/05/2008 às 16:35
Cidade:
Atividade:

Como faço pra atribuir null, ou qualquer outro valor a uma variavel do tipo Date. Muito Obrigado pela atenção

[ 10º ]
Vivian Almeida

Data : 13/05/2008 às 10:46
Cidade:
Atividade:

Excelente artigo. Estou estudando java e veio de encontro com minha necessidade. Explicou de forma simples.

Att. Vivian Almeida

[ 11º ]
Bruno Coelho

Data : 18/04/2008 às 15:49
Cidade:
Atividade:

Otimo artigo!
Consegui terminar um trabalhado da faculdade graças a esse artigo.
A parti de hoje estarei ligado nas suas dicas!
Obrigado por compartilhar seu conhecimento.

[ 12º ]
Hélio correa

Data : 17/12/2007 às 15:22
Cidade:
Atividade:

Gostei do artigo também, estou precisando exatamentoe do próximo material, quero somar meses na minha data atual. Ex: a conta vai ser paga em 10 vezes.... valeu helio

[ 13º ]
Augusto Lopes

Data : 08/11/2007 às 13:03
Cidade:
Atividade:

Foi de grande utilidade para mim, que bom termos pessoas como você que estão dispostas a tirar dúvidas de colegas.
gostei de verdade, até a próxima dica

[ 14º ]
Cássio

Data : 08/10/2007 às 09:02
Cidade:
Atividade:

Gostei dessa idéia de utilizar awt no exemplo final.. Parece até mensagem subliminar para ensinar interface.

No momento estou tentanto resolver um probleminha aqui com o horário de verão... Nosso projeto está se comportando de maneira estranha quando a opção de ajuste automático para horário de verão do Windows está ativado.

Felicidades.

[ 15º ]
Fábio Oliveira

Data : 17/06/2007 às 14:02
Cidade:
Atividade:

Parabéns Handerson, um ótimo artigo pra que está começando a estudar Java, assim como eu.
Obrigado, e se possível continue postando mais exemplos interessantes como este!
Abraço.

Fábio Oliveira

[ 16º ]
Thaís M Pereira

Data : 11/06/2007 às 21:13
Cidade:
Atividade:

Achei excelente, consegui resolver meu trabalho de faculdade com a ajuda do artigo, ele está bem claro e muito interessante! Parabénsssss...

Data : 04/06/2007 às 14:07
Cidade:
Atividade:

gostaria de receber sempre novidades e dicas para trabalhar com Java, esse questão de data e horas mesmo eu estou desenvolvendo um sistema e preciso disso.

[ 18º ]
Hermevaldo Alves

Data : 27/09/2006 às 22:55
Cidade:
Atividade:

Achei muito bom... deu para tirar as dúvidas que eu tinha e aprender um pouco mais sobre fotação de datas.


[Outrolado]

[ Veja mais... ]

Newsletter

Newsletter

No Twitter