Conversao de data utilizando SimpleDateFormat

4 respostas
T

Bom dia a todos, eu tenho uma classe feita por um amigo q roda "debaixo" dos pano, toda vez q se utiliza um Date, porem ao buscar uma data no banco de dados para preencher um campo na tela ele lança uma exception e n consigo acha a soluçao, se alguem puder analisar e ajudar, agradeço.

@Convert(Date.class)
public class DateConverter implements Converter<Date> {

	@Override
	public Date convert(String value, Class<? extends Date> arg1,
			ResourceBundle arg2) {

		try {
			if (!value.equals("") || !value.isEmpty()) {
				// Pattern para datas no formato dd/MM/yyyy
				Pattern p = Pattern.compile("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)");
				Matcher m = p.matcher(value);
				if (!m.find()) {
					System.out.println("dd/MM/yyyy HH:mm:ss");
					return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss")
							.parse(value);
				} else {
					System.out.println("dd/MM/yyyy");
					return new SimpleDateFormat("dd/MM/yyyy").parse(value);
				}
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;

	}

a Exception q lança

java.text.ParseException: Unparseable date: "2012-08-20"
	at java.text.DateFormat.parse(DateFormat.java:337)
	at br.com.amazonas.conhecimentoTransporte.converters.DateConverter.convert(DateConverter.java:31)
	at br.com.amazonas.conhecimentoTransporte.converters.DateConverter.convert(DateConverter.java:1)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.instantiate(VRaptorInstantiator.java:130)
	at br.com.caelum.iogi.MultiInstantiator.instantiate(MultiInstantiator.java:20)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:85)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:80)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateOrAddError(IogiParametersProvider.java:80)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateParameters(IogiParametersProvider.java:73)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.getParametersFor(IogiParametersProvider.java:63)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:126)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

4 Respostas

rmendes08

Simples, você especificou que o formato da String é dd/MM/yyyy, mas você está recebendo uma data no formato yyyy-MM-dd.

T

e como eu faço esta conversao ?? tentei utilizar o .format passando o value como atributo mas n funcionou…

rmendes08

Ué, você precisa alterar a String de formato :

new SimpleDateFormat("yyyy-MM-dd").parse(value);
PadrE

Opa… eae.

Pela conversa acima… isso está me cheirando um CtrlC, CtrlV hein… rs
O argumento String value está vindo como “2012-08-20” e você fez um Simple usando “dd/MM/yyyy HH:mm:ss”. Tente fazer o que o amigo mencionou… mude o Simple para “yyyy-MM-dd” e veja o que ocorre.

Para facilitar, procure fazer um debug e acompanhar a execução… isso vai ajudar a entender o código e a encontrar uma solução…

FuI!

Criado 10 de setembro de 2012
Ultima resposta 10 de set. de 2012
Respostas 4
Participantes 3