Erro no SimpleDateFormat

9 respostas
rodrigo73
Ai galera implementei um método de formatação de data mas está apresentando um erro
java.text.ParseException: Unparseable date: "2011-12-27 22:22:22.0"
	at java.text.DateFormat.parse(Unknown Source)
	at dao.DaoOS.DataPrazo(DaoOS.java:43)
	at dao.DaoOS.listarOS(DaoOS.java:27)
	at Turmas.JanelaPrincipal.instanciaComponentes(JanelaPrincipal.java:44)
	at Turmas.JanelaPrincipal.<init>(JanelaPrincipal.java:35)
	at Turmas.JanelaPrincipal.main(JanelaPrincipal.java:171)

E o método que uso é o seguinte (linha 39 a 65):

public String DataPrazo(String d,int opcao){
		String DataEnviar = null;
		try {
			SimpleDateFormat sdfe = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); // Formato do DATETIME que vem do banco  
			Date data = sdfe.parse(d);
			// Instancia um objeto Data com a data e hora que veio do banco  
			
			GregorianCalendar gc = new GregorianCalendar(); // Cria um calendário  
			gc.setTime(data); // Atribui a data ao calendário  
	  
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss");
			if(opcao==1){//horário entrada
				DataEnviar = sdf.format(gc.getTime());
			}
			if(opcao==2){//horário previsão
				 // Formato de impressão da data
				gc.add(Calendar.HOUR,48);//adiciona 48 horas
				DataEnviar =  sdf.format(gc.getTime());
			}
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return DataEnviar;
		
		
	}

9 Respostas

nel

O que é aquele .0 ao fim ? :slight_smile:

E outra, não é compatível com o nenhum dos dois formatos que você passou.
Pois não existe a combinação 'YYYY-MM-DD HH:mm:ss", que seria o mais próximo do formato passado.

rodrigo73

o .0 é o centésimo o datatime retornado pelo mysql!
acho que o erro é nele mas se colocar YYYY no ano vai abreviaria ele não?

nel

rodrigo73:
o .0 é o centésimo o datatime retornado pelo mysql!
acho que o erro é nele mas se colocar YYYY no ano vai abreviaria ele não?

Ou você remove o centésimo ou alterar a transformação.
Acho que o mais simples seria transformar seu TIMESTAMP em um java.util.Date e depois realizar a manipulação que desejar.
Sobre o YYYY, desculpe, é yyyy e o DD é dd.

rodrigo73

eu não sei como que retiro aquele centésimo da consulta… com seria o caso TIMESTAMP em java.util.Date?

Lembrando que eu teria que alterar 48 horas na data

nel

rodrigo73:
eu não sei como que retiro aquele centésimo da consulta… com seria o caso TIMESTAMP em java.util.Date?

Lembrando que eu teria que alterar 48 horas na data

Assim:

Timestamp ts = new Timestamp (new Date().getTime());
		Calendar c = Calendar.getInstance();
		c.setTime(new Date(ts.getTime()));
		c.add(Calendar.HOUR, 48);
		
		String result = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime());
		System.out.println(result);
CharlesAlves

não entendi uma coisa tais guardando a data no banco com string?! Porque dá pra receber o valor direto do banco como java.util.Date em vez de ficar fazendo formatação.

rodrigo73

Charles estou guardando como datatime, tem o comando getDate neh… mas teria que fazer muitas mudanças no código. acho melhor mexer com a formatação apenas

rodrigo73

nel, onde entraria a String nesse script?

nel

Rodrigo, a única String no código que postei é o resultado final da transformação, que inclui a soma de 48 horas.
Foi o que sugeri anteriormente, ao invés de tratar conversão, simplesmente usa o Timestamp, é esse objeto que está sendo retornado do seu banco de dados, não é?

Assim, fica mais fácil a manipulação.

Criado 5 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 9
Participantes 3