Java - Utilizando e formatando datas - Java - karmaicom

Propaganda
Visualização do documento
Java - Utilizando e formatando datas.doc
(59 KB) Baixar
Utilizando e formatando datas
http://www.guj.com.br/java.tutorial.artigo.8.1.guj
Guilherme Silveira
Aqui você irá aprender o básico da classe java.util.Date, para formatar e comparar datas.
Download do material relacionado ao tutorial
Trabalhando com datas
Este artigo resolve uma dúvida muito comum em programadores recém chegados ao Java. Como
alterar o formato de uma data, do formato americano para o brasileiro, por exemplo.
Outras questões surgem após começar a trabalhar com datas como, por exemplo, comparações entre
elas.
Tudo isso será demonstrado nesse pequeno tutorial. As explicações estão simples e o código
comentado.
Dica: Nunca se esqueça de usar as funções da classe java.util.Date para fazer comparações de datas.
É mais elegante utilizar os métodos do que a comparação através dos valores do getTime(). Evita usar
os métodos depreciados (deprecated) da Date.
A classe java.util.Date está em desuso (ainda não está deprecated), e é altamente recomendado você
utilizar um java.util.GregorianCalendar, que é muito mais robusto. Porém, muitas APIs ainda utilizam
a Date, o que nos obriga a usá-la. Algumas pessoas ainda preferem a utilização de um long, para
guardar a data em milisegundos, já que muitas pessoas não gostam da API do java para datas.
Basicamente usamos uma instância da classe java.text.SimpleDateFormat para converter um objeto
Date em diferentes formatos de String, e vice-versa.
Para instanciar um transformador, devemos passar o formato que ele irá trabalhar. No exemplo a
seguir, o formato brasileiro:
1 // cria o formatador
2 SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
Você pode utilizar várias letras para indicar diferentes coisas, não precisa ficar só com "d", "m", "y".
Você pode encontrar os outros símbolos na documentação da classe.
Agora podemos transformar uma string contendo o valor 18/09/1981 em um objeto data:
1 Date data = formatador.parse("18/09/1981");
E transformar o objeto data de volta em uma string contendo o valor 19810918 (note que o formato é
outro, apenas como exemplo).
1
2
3
4
// cria o formatador
SimpleDateFormat formatador = new SimpleDateFormat("yyyyMMdd");
// cria a string
String novoFormato = novoFormatador.format(data);
Dica: Preste atenção que a classe SimpleDateFormat não se responsabiliza por acessos de threads
diferentes em suas funções. Isso significa que você deve ter uma instância dessa classe sendo
chamada no máximo por uma thread em um único instante. Para tanto, sincronize o acesso no objeto
ou simplesmente não mantenha o objeto como membro de uma classe mas sim como variável local de
um método.
O método getTime() da classe Date é utilizado para retornar o numero de milisegundos que se
passaram desde um certo dia (primeiro de janeiro de 1970).
Ai vem a tentação de usar a comparação de maior e menor para saber qual data veio antes de qual.
Porém é muito mais elegante utilizar os métodos before() e after() da mesma classe.
Outro método que você pode utilizar é o compareTo(), que retorna 0 no caso das duas datas serem a
mesma, um valor negativo se a data representada pelo objeto na qual o método for chamado vier
antes da data argumento e um valor positivo no caso contrário.
Para criar um objeto data com a data atual usamos o seguinte código (mais simples do que voce
esperava):
1 // pega o dia de hoje
2 Date data = new Date();
Ou então, e já aproveitando para mostrar o GregorianCalendar:
1 // um calendar também é criado com a data atual
2 GregorianCalendar calendar = new GregorianCalendar();
3 Date data = calendar.getTime();
E por último você pode utilizar o método setTime() para setar um novo valor para seu objeto Date,
alcançando a funcionalidade de acrescentar uma hora (ou algum outro valor) com o seguinte tipo de
código:
1
2
3
4
// pega o dia de hoje
Date data = new Date();
// adiciona 1000 milisegundos, vezes 60 (um minuto), vezes 60 (uma hora), vezes 1
data.setTime(data.getTime() + 1 * 60 * 60 * 1000);
Dica: Para saber se um objeto de tipo java.util.Date é o dia de hoje não basta utilizar os métodos
before(), after() ou compareTo, pois eles comparam até os milisegundos. Para atingir tal objetivo crie
uma string a partir do objeto data, extraindo somente o dia, mês e ano e compare essa string com
uma outra string representando a outra data que deseja comparar.
Se você vai utilizar muito este tipo de modificação nas datas, recomendo muito que você utilize o
java.util.GregorianCalendar. Utilize Date apenas se você realmente precisa, já que outra class trabalha
com ela. Utilizando um GregorianCalendar, você pode extrair a data dele utilizando o getTime(),
devolvendo um Date, como visto na listagem anterior.
Você pode baixar um programa de demonstração com este tutorial. Este arquivo java pode ser
compilado e rodado:
java ExemploData dataOriginal formatoOriginal formatoFinal
Trabalhando com datas em Java
http://lib.seven.com.br/ampliar.asp?codartigo=383
Programação: veja como classes de Java resolvem o problema da apresentação de datas para o
usuário, onde ele estiver no mundo.
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));
...
Arquivo da conta:
karmaicom
Outros arquivos desta pasta:

algaworks-ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228.pdf (5759
KB)
 curso_java_I.pdf (152 KB)
 algaworks-ebook-jpa-e-hibernate-1a-edicao-20150731.pdf (1841 KB)
 Java Algaworks.zip (6570 KB)
 Programação Java para Web.pdf (2399 KB)
Outros arquivos desta conta:

Documentos
 Galeria
 IDE
 Privada
Relatar se os regulamentos foram violados








Página inicial
Contacta-nos
Ajuda
Opções
Termos e condições
Política de privacidade
Reportar abuso
Copyright © 2012 Minhateca.com.br
Download