[RESOLVIDO]Erro na conversão de data

14 respostas
A

Estou com problemas na minha função de conversão. Eu recebo o parâmetro que vem de um JTextField e desejo gravar no banco com o formato yyyy-MM-dd hh:mm:ss, poderiam me ajudar a corrigir o erro?

public String formataData(String data){		  
		DateFormat from = new SimpleDateFormat("yyyy-mm-dd"); //cria uma mascara de conversao  
		//DateFormat to = new SimpleDateFormat("dd/mm/yy"); //cria a outra mascara de conversao
		String convertida = "";
		
		try {  
		    Date dateDate = from.parse(data); //converte a string recebida em uma data  
		    //convertida = to.format(dateDate); //converte a data na string com o formato de "to"
		    convertida = dateDate.toString();
		    System.out.println(convertida); //imprime  
		} catch (ParseException ex) {  
		    System.out.println("Não foi possivel converter");  
		} 
		return convertida;
	}

14 Respostas

volnei

yyyy-MM-dd

Onde MM é o mês e mm é minutos.

Abraços

A

Corrigi como indicado e dá o erro: java.text.ParseException: Unparseable date: “01/07/2009”

volnei

Mais vc quer converter em que formato? Decide…

dd/MM/yyyy ou yyyy-MM-dd

Use a mascara certa pra cada formato de entrada.

O

1º Post sempre o erro.

2º Qual o formato da string de entrada?

E por último, não importa o pattern que você use com o DateFormat, a data sempre será salva no formato do banco que você está usando. A mesma coisa serve para chamada toString() de um objeto Date.
Um formatador você usa pra apresentar seus dados (ou pra criar o objeto específico a partir de uma fonte), não para armazenar. Se você quer mostrar a data num formato, use o método format(), que está comentado no seu código ou, por exemplo o String.format().

A

Comigo, esse negócio de sempre salva no formato do banco independente do pattern não resolve não…
Eu quero salvar a data que o usuário digitou no text que é, por exemplo, 02/07/2009 no formato 2009-07-02 00:00:00 que é a forma como o mysql aceita, entendeu?

AH! o erro eu já postei…dá uma olhada aí pra cima…

Podem me ajudar por favor…

M
String data = "02/07/2009";
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        Date date = df.parse(data);
        df.applyPattern("yyyy-MM-dd");
        System.out.println(df.format(date));

Cara eu nao uso muito SimpleDateFormat… Mas eu acho que deve ter dado ParseException porque sua pattern se aplica a um tipo de data diferente…
Eu coloquei o MESMO estilo de data que a sua, e uma pattern diferente e deu tudo certo para transformar String -> Date. Depois do use o “applyPattern(String c)” para aplicar a pattern que voce quer, no caso “yyyy-MM-dd” e já pode dar um “return formater.format(data)”.

Pelo o que você falou você vai salvar dia e hora no MySql, mas se voce nao quer realmente salvar as horas, to falando isso porque voce postou 00:00:00, use o campo “date” ao inves de “datetime” no mysql, que ai você so salva o dia mesmo!

Espero que ajude!

edit: gostaria de ouvir mais sobre o que o ozix disse:

Nao entendi… Porque eu lembro que quando tentava mandar uma data no estilo dd/mm/yyyy pro MySql ele não aceitava a data…
A nao ser que você use a classe Date do pacote sql ai ele já formata certinho:

java.sql.Date data = new java.sql.Date(new java.util.Date().getTime()); // o construtor sql.Date aceita um long
        System.out.println(data); // o output aqui, pelo menos no meu pc, é yyyy-mm-dd
                                             // sem precisar de conversão alguma
A

Ok, é isso mesmo!!!

O

ACPF1986:
Comigo, esse negócio de sempre salva no formato do banco independente do pattern não resolve não…
Eu quero salvar a data que o usuário digitou no text que é, por exemplo, 02/07/2009 no formato 2009-07-02 00:00:00 que é a forma como o mysql aceita, entendeu?

AH! o erro eu já postei…dá uma olhada aí pra cima…

Podem me ajudar por favor…

Brother, quando você usa um formatador o objeto data não muda. O seu problema pelo que vi, como foi apontado, é que você está precisando da classe java.sql.Date e não da java.util.Date. Mais uma vez, independente do formato.

O

Testa usar o DateFormat com vários formatos diferentes e salva no banco. Depois use a sua ferramenta do banco e dá um select pra ver se o formato que ficou. :wink:

M

Mas por exemplo:

Eu uso o PreparedStatement pra tudo que é pra banco
Então… quando vou setar o parametro, você diz que qualquer coisa vai entrar usando o “objPrep.setDate(x, param);” ? Porque você pode setar tudo como string que o banco salva de qualquer jeito, correto?

Vou fazer esse experimento ai que você disse!

edit: você disse usar o format em java.ulti.Date ou java.sql.Date?

O

Murl:
Porque você pode setar tudo como string que o banco salva de qualquer jeito, correto?
Mas aí que tá, por que vocês ficam usando String pra representar data? Você programa orientado a objetos ou só a Strings?
Pra representar a idade de uma pessoa, você usa String também?

M

Acho que eu nao me expressei bem…

Eu perguntei se ele faz essa conversão quando você usa setString ou usando setDate mesmo?
Eu falei da String porque achei que você usava assim…

Kleber-rr
Olá pessoal, me digam uma coisa: Eu estou usando o banco em Mysql, com um campo Date, numa tabela criada por uma classe java como essa abaixo:
import java.util.Date;

@Entity
@Table(name = "audiencia")
public class Audiencia {

	@Id
	@GeneratedValue
	@Column(name = "id_audiencia")
	private Long id;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_peticao")
	private Date data_peticao;

O problema é q as datas não estao sendo inseridas corretamente, ou seja, aparece sempre um dia anterior ao invés o digitado...
Alguem poderia me ajudar??

Valeu pessoal!

Kleber-rr

eae?? alguma sugestão???

Criado 1 de julho de 2009
Ultima resposta 1 de fev. de 2010
Respostas 14
Participantes 5