Formatar Data

32 respostas
oitathi

Olá!
Eu tenho uma data no seguinte formato:
Mon Aug 27 2012 00:00:00 GMT-0300 (Hora oficial do Brasil)
tem como eu passar isso para simplesmente 27/08/2012 ?
Obrigada!!!

32 Respostas

E

Converta isso para String, usando SimpleDateFormat.

Rodrigo_Sasaki

Sim.

oitathi

não entendi… vc pode ser mais específico…desculpa!!!

Hebert_Coelho

Google it:
format date java

oitathi

antes de postar aqui jah busquei em todos os lugares…
mas não entendi as explicações…

samuk1

Tem que mastigar bem mastigadinho né… :smiley:

SimpleDateFormat fdata = new SimpleDateFormat("dd/MM/yyyy");
Date xdata = new Date();
String  data;
data = fdata.format(xdata);

:lol: Vamos Estudar galera!

Hebert_Coelho

oitathi:
antes de postar aqui jah busquei em todos os lugares…
mas não entendi as explicações…
Pois é, quando eu procurei com as mesmas palavras q eu te disse eu achei http://exampledepot.com/egs/java.text/FormatDate.html como primeiro link.

Creio que você só não procurou no google com as palavras certas…

oitathi

só q isso tah chegando como uma string e não como uma data!!!

oitathi

o q eu recebo é uma string

Hebert_Coelho

Vamos tentar mais uma vez, pesquise no google:
format string to date java

oitathi

de boa, vc não tah ajudando
e vc é bem grosso por sinal
vc não precisa perder seu preciso tempo mandando os outros buscarem coisas no google.
se eu já falei q não entendi os exemplos de lá é pq não entendi!
pra q vc responde então? pra ganhar ponto aqui?
acho q os moderadores deviam punir caras q nem vc

samuk1

Deve ser Pq ele tá pesquisando no IE… ^^ hahahah!

Pesquisa isso Brother: “casting string to date”…

E Cuidado com o que fala, ninguem tem culpa se vc lê e não entende!

Hebert_Coelho

oitathi:
de boa, vc não tah ajudando
e vc é bem grosso por sinal
vc não precisa perder seu preciso tempo mandando os outros buscarem coisas no google.
se eu já falei q não entendi os exemplos de lá é pq não entendi!
pra q vc responde então? pra ganhar ponto aqui?
acho q os moderadores deviam punir caras q nem vc
Grosso eu? rapaz… tem gente aqui bem pior que eu.
Eu to querendo te mostrar que você será um profissional mais valorizado se você aprender usar o google.
A diferença de uma pessoa que encontra o que quer no google e a que não encontra, na maioria das vezes, são os termos procurados.
Eu te passei os termos correto, mas pelo visto você prefere continuar pensando “eu não entendi e se alguém não me der algo pronto não irei entender”.
Bem, boa sorte aí.

oitathi

gente, eu fiz o q vcs falaram…
por isso q postei
ele não entende o formato q eu passei
dah o seguinte erro:

exception is java.text.ParseException: Unparseable date: “Thu Aug 30 2012 00:00:00 GMT-0300 (Hora oficial do Brasil)”"},

meu código tah assim:

public void setDataVinculo(String dataVinculo) throws ParseException {
		Date date = new Date(); 
		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
        date = (java.util.Date)formatter.parse(dataVinculo);

Quem for gentil em me ajudar, obrigada…mas só os educados!

E

Oitathi-san, vou explicar direitinho para você entender.

Primeira coisa: isso que você está mostrando ( Mon Aug 27 2012 00:00:00 GMT-0300 ) é o resultado de imprimir uma string que já existe nesse formato, ou então é um java.util.Date?

Vamos supor que seja um java.util.Date.

Na verdade, a classe java.util.Date não guarda dentro dela uma coisa como “Mon Aug 27 2012 00:00:00 GMT-0300”.
Ela guarda dentro dela um long (um número de 64 bits) que é o número de milissegundos passados desde 1/1/1970. Ou seja, na verdade o “verdadeiro valor” de um java.util.Date é um número, não esse troço que você está mostrando.

É mais ou menos como o seu salário quando está depositado no banco.

O seu salário, depositado no banco (digamos que seja 10.000,00) não está em um cofre do banco, como um monte de notas de 100 reais. Ele está como um número binário.

Quando o sistema do banco precisa mostrar o seu saldo, ele mostra uma String, talvez no formato “10000.00” ou então “10.000,00”, ou talvez até “dez mil reais e nenhum centavo”.

Quando o sistema do banco precisa lhe dar o dinheiro em reais quando você vai sacá-lo em um caixa automático, ele então dá o comando para o caixa automático para contar o dinheiro, e assim por diante.

Mas nunca há um bolinho de dinheiro, separado em uma caixinha lá no banco, que é o seu salário, separadinho como notas.

Portanto, o que você sempre “vê” é uma String, e o que você usa para representar uma data é um java.util.Date, que sempre precisará de um java.text.SimpleDateFormat para ser representado como uma string “dia/mês/ano” ou “year-month-day” ou sei lá como.

oitathi

acho q vcs q não entendem a pergunta…
mas beleza…

Rodrigo_Sasaki

Cara, o link que te mandei la em cima, e a sugestão do entanglement já matam sua dúvida, sua string não está sendo parseada corretamente justamente porque o formato que você quer não é ‘dd/MM/yyyy’.

Se você olhar na documentação do SimpleDateFormat, ele te ensina como identificar cada parte no seu formato. O formato que você tem é um pouco diferente do comum, eu entendo, mas ainda assim, está lá.

E

Agora você disse que está recebendo o valor “Mon Aug 27 2012 00:00:00 GMT-0300” como uma String. Ai, isso é chato de converter de volta para um java.util.Date.

Se realmente for isso, então você pode usar o SimpleDateFormat, mas na direção inversa (usar o método “parse”, que converte de String para Date, não “format”. ) .

Então basicamente você, para passar de “Mon Aug 27 2012” para “27/08/2012”, precisa usar 2 SimpleDateFormat: um que converte de String para Date, e outro que converte de Date para String, no formato desejado.

oitathi

eu não recebo uma data, recebo uma string
e para facilitar a leitura de vcs, eu quero tranformar essa string em outra… apenas com dd/mm/yyyy
podia ficar dando split…mas fiaria feio… queria saber se tem um jeito mais bonito

E

Só para finalizar, vou mostrar como é que se faz essa conversão.

Rodrigo_Sasaki

oitathi:
eu não recebo uma data, recebo uma string
e para facilitar a leitura de vcs, eu quero tranformar essa string em outra… apenas com dd/mm/yyyy
podia ficar dando split…mas fiaria feio… queria saber se tem um jeito mais bonito

Não é só dar split também, por que você tem Aug como mês, e não 08.

É bem sério, se você olhar a tabelinha e os exemplos que existem na documentação, você resolve isso rapidinho com alguns testes.

Ah, vai uma dica, você pode ter que usar um Locale diferente.

L

tente algo parecido com isso:

DateFormat newStyle = new SimpleDateFormat("dd/MM/yyyy");
		
//trabalhe com estes parametros E MMM dd HH:mm:ss z yyyy
				DateFormat df = new SimpleDateFormat(
						"E MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);

				Date data = df.parse(data.toString().trim());

				String formatedDate = newStyle.format(data);
				return formatedDate;

veja os formatos aki
http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/
http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

E
package guj;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class ExemploCompletoSimpleDateFormat {
    public static void main(String[] args) throws ParseException {
        String original = "Mon Aug 27 2012 00:00:00 GMT-03:00";
        SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd yyyy HH:mm:ss z", Locale.US);
        SimpleDateFormat sdf2 = new SimpleDateFormat ("dd/MM/yyyy");
        Date dt = sdf1.parse(original);
        String str = sdf2.format(dt);
        System.out.println (str); // deve imprimir "27/08/2012"
    }
}
E

A propósito, ainda acho estranho você receber essa String, porque ela é muito desajeitada para usar, como você deve ter visto. Você realmente não recebe um java.util.Date ou um java.sql.Date?

oitathi

É, ELE NÃO RECONHECE A STRING Q CHEGA NO FORMATO “E MMM dd HH:mm:ss z yyyy”, Locale.ENGLISH

ELE NÃO CONSEGUE FAZER O PARSE

oitathi

eh q tô mexendo com dojo…
a string chega assim…
talvez exista alguma coisa no dojo que trate isso, mas não consegui achar

E

É que o lgweb não testou a string do SimpleDateFormat antes de postar. Eu testei a minha e a minha está funcionando :slight_smile:

oitathi

o problema é que ele vem com o (Hora oficial do Brasil) na string… talvez se eu der um trim, funcione

drsmachado

Mexendo com dojo? Está de castigo, por acaso?
Enfim, talvez o problema esteja no que o dojo retorna de um datepicker (creio que seja o caso)

Vi aqui

Dapcapix

Coloca seu código ai!

L

faz isso>

public static void main(String ...args){
	//	Mon Aug 27 2012 00:00:00 GMT-0300 (Hora oficial do Brasil) 
	StringBuilder value = new StringBuilder("Mon Aug 27 2012 00:00:00  GMT-0300 (Hora oficial do Brasil"); 
	value.delete(value.length() -33, value.length());
		//"EEE, d MMM yyyy HH:mm:ss Z" 	Wed, 4 Jul 2001 12:08:56 -0700
		DateFormat newStyle = new SimpleDateFormat("dd/MM/yyyy");
		DateFormat df = new SimpleDateFormat(
				"E MMM dd yyyy HH:mm:ss",Locale.US);

		Date data = null;
		try {
			data = df.parse(value.toString().trim());
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		String formatedDate = newStyle.format(data);
		System.out.println(formatedDate);
	}
oitathi

POXA GENTE, VALEU:

Mas a formatação da string q chega ficou bem feia…

public void setDataVinculo(String dataVinculo) throws ParseException {
	dataVinculo = dataVinculo.substring(0,dataVinculo.lastIndexOf("3")+1)+":00";
	SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd yyyy HH:mm:ss z", Locale.US);  
	SimpleDateFormat sdf2 = new SimpleDateFormat ("dd/MM/yyyy");  
	Date dt = sdf1.parse(dataVinculo);  
	this.dataVinculo = sdf2.format(dt);  
}
Criado 30 de agosto de 2012
Ultima resposta 30 de ago. de 2012
Respostas 32
Participantes 8