2012-04-01 15 views
5

Escribí un método simple de Util para convertir un String en Java en util.Date. Lo que no soy capaz de averiguar es por qué el método funciona para la primera entrada, y no para el segundo, teniendo en cuenta que las entradas sean idénticas:ParseExeption incoherente con formato de datos en Java

Código:

package util; 

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

public class StringToDate { 

    public Date getDateFromString(String strDate, String dateFormat) { 

     DateFormat df = new SimpleDateFormat(dateFormat); 
     Date date = null; 

     try { 

      date = df.parse(strDate); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(date); 

     return date; 
    } 

    public static void main(String[] args) { 

     StringToDate s2d = new StringToDate(); 

     s2d.getDateFromString("12-18-11, 10:36 AM","MM-dd-yy, hh:mm a"); 
     s2d.getDateFromString("02-04-12, 01:17 PM","MM-dd-yy, hh:mm a"); 
    } 
} 

Salida:

Sun Dec 18 10:36:00 CET 2011 
null 
java.text.ParseException: Unparseable date: "02-04-12, 01:17 PM" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at util.StringToDate.getDateFromString(StringToDate.java:17) 
    at util.StringToDate.main(StringToDate.java:33) 

Lógicamente, la salida debería haber sido Sat Feb 04 13:17:00 CET 2012 yendo por la primera salida. ¿Por qué se lanza el ParseException?

EDITAR: Las dos líneas siguientes funciona correctamente:

s2d.getDateFromString("02-04-12", "MM-dd-yy"); 
s2d.getDateFromString("01:17 PM", "hh:mm a"); 

Salida:

Sat Feb 04 00:00:00 CET 2012 
Thu Jan 01 13:17:00 CET 1970 

Pero la excepción ocurre cuando trato de analizar tanto la fecha y el tiempo juntos.

+0

Estoy confundido - Funciona bien para mí. –

+0

Yo también, ¿en qué cultura estás? Gracias por incluir un programa breve pero completo, fíjate :) –

+0

@JonSkeet: No entiendo lo que quieres decir con "¿en qué cultura estás?", ¡Pero gracias por el cumplido! ¿El programa funciona bien para ti? Estoy usando JDK 1.6 (1.6.0.11). Probé Eclipse, e incluso la ruta clásica de solicitud de comando para ejecutar el [SSCCE] anterior (http://homepage1.nifty.com/algafield/sscce.html). Aún así, la misma excepción; misma inconsistencia ¡Ayuda! – SNag

Respuesta

7

¿Tiene espacio libre o algún otro carácter de espacio Unicode en algún lugar de su cadena de fecha o máscara de formato?

Pude reproducir su error si reemplazaba uno de los espacios en la segunda de sus cadenas de fecha con un espacio sin interrupciones, como Unicode character 160.

+0

Excelente captura !! Sí, eso fue todo! ¡Oh mi! La cadena de fecha en el programa anterior en realidad se copió de un texto externo que estaba tratando de analizar.¿Cómo se pueden eliminar esos espacios sin interrupción y reemplazarlos por espacios en blanco reales? – SNag

+1

+1 Porque ahora puedo seguir con mi vida. No habría podido dormir hasta que supiera lo que estaba sucediendo aquí :) –

+0

Encontré lo que estaba buscando: 'cleanString = dirtyString.replace (" \ u00a0 "," ")' o 'cleanString = dirtyString .replace (" ", "") 'elimina el parse-exception-causing **   **! :) – SNag

Cuestiones relacionadas