2010-01-05 23 views
18

Al tratar de transformar el formato de fecha, recibo una excepción: fecha indescifrable y no sé cómo solucionar este problema.Java: excepción de fecha inaplicable

Estoy recibiendo una cadena que representa una fecha del evento y me gustaría mostrar esta fecha en un formato diferente en la GUI.

Lo que estaba tratando de hacer es la siguiente:

private String modifyDateLayout(String inputDate){ 
     try { 
      //inputDate = "2010-01-04 01:32:27 UTC"; 
      Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
      return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return "15.01.2010"; 
     } 
    } 

De todos modos la línea

String modifiedDateString = originalDate.toString(); 

es ficticia. Me gustaría obtener una cadena de fecha en el siguiente formato:

dd.MM.yyyy HH: mm: ss

y el ejemplo cadena de entrada es la siguiente:

2010-01-04 01:32:27 GMT

¿alguien sabe cómo convertir la fecha de ejemplo (String) anterior en un formato de cadena dd.MM.yyyy HH: mm: ss?

¡Gracias!

Editar: He solucionado el formato de fecha de entrada incorrecto, pero aún así no funciona. Arriba está el método pegado y debajo está la imagen de la pantalla de la sesión de depuración.

alt text http://img683.imageshack.us/img683/193/dateproblem.png

#update me corrieron

String[] timezones = TimeZone.getAvailableIDs(); 

y no es UTC cadena de la matriz. Es un problema extraño.

hice un truco sucio que funciona:

private String modifyDateLayout(String inputDate){ 
    try { 
     inputDate = inputDate.replace(" UTC", ""); 
     Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate); 
     return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     return "15.01.2010"; 
    } 
} 

Pero aún así yo preferiría para transformar la entrada original sin cortar zona horaria de distancia.

Este código está escrito para teléfonos Android con JDK 1.6.

+0

Sé que esto es un hilo de hace mucho tiempo, pero para aclarar dudas con respecto a la excepción de análisis cuando "UTC" está en el formato de fecha. El código está roto en Android. [Informe de error de Android] (http://code.google.com/p/android/issues/detail?id=14963) – Creniale

Respuesta

39

Lo que básicamente haces aquí es confiar en Date#toString() que ya tiene un patrón fijo. Para convertir un objeto Java Date en otro patrón String legible para el ser humano, necesita SimpleDateFormat#format().

private String modifyDateLayout(String inputDate) throws ParseException{ 
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
} 

Por cierto, la excepción "fecha unparseable" puede aquí única ser lanzados por SimpleDateFormat#parse(). Esto significa que el inputDate no está en el patrón esperado "yyyy-MM-dd HH:mm:ss z". Probablemente necesites modificar el patrón para que coincida con el patrón real de inputDate.

Actualización: bien, hice una prueba:

public static void main(String[] args) throws Exception { 
    String inputDate = "2010-01-04 01:32:27 UTC"; 
    String newDate = new Test().modifyDateLayout(inputDate); 
    System.out.println(newDate); 
} 

se imprime correctamente:

03.01.2010 21:32:27 

(Estoy en GMT-4)

Actualización 2: según tu edición, realmente tienes un ParseException en eso. La parte más sospechosa sería la zona horaria UTC. ¿Es esto realmente conocido en su entorno Java? ¿Qué versión de Java y qué versión de sistema operativo está usando? Compruebe TimeZone.getAvailableIDs(). Debe haber un UTC en el medio.

+0

El problema es que la línea Date date = formatter.parse (inputDate); arroja una excepción. Arreglé el formato de entrada aaaaa-MM-dd HH: mm: ss z pero aún arroja una excepción. –

+0

Lo esperaba, vea mi edición que se agregó antes de que comentasen. Si necesita más ayuda para encontrar el patrón correcto, deberá publicar un ejemplo del valor ** real ** 'inputDate'. – BalusC

+1

Tengo este problema para analizar esta fecha: "10/11/2011 06:03:19 p.m." – DkAngelito