2010-01-05 12 views
18

Durante il tentativo di trasformare il formato della data ottengo un'eccezione: data non analizzabile e non so come risolvere questo problema.Java: eccezione di data non sostituibile

Sto ricevendo una stringa che rappresenta una data di evento e vorrei visualizzare questa data in formato diverso nella GUI.

Quello che stavo cercando di fare è il seguente:

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"; 
     } 
    } 

In ogni caso la linea

String modifiedDateString = originalDate.toString(); 

è fittizio. Vorrei ottenere una stringa data nel seguente formato:

dd.MM.yyyy HH: mm: ss

e l'esempio di ingresso stringa è il seguente:

2010-01-04 01:32:27 UTC

Qualcuno sa come convertire la data di esempio (String) sopra in un formato stringa dd.MM.yyyy HH: mm: ss?

Grazie!

Modifica: Ho corretto il formato della data di input errato, ma ancora non funziona. Sopra è il metodo incollato e sotto è l'immagine dello schermo dalla sessione di debug.

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

#update ho corse

String[] timezones = TimeZone.getAvailableIDs(); 

e c'è UTC stringa nella matrice. È un problema strano

ho fatto un hack sporco che funziona:

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"; 
    } 
} 

Ma ancora io preferirei di trasformare l'ingresso originale senza tagliare fuso orario di distanza.

Questo codice è scritto per telefono Android con JDK 1.6.

+0

So che questo è un thread molto tempo fa ma per chiarire i dubbi relativi all'eccezione dell'analisi quando "UTC" è nel formato data. Il codice è rotto in Android. [Segnalazione bug Android] (http://code.google.com/p/android/issues/detail?id=14963) – Creniale

risposta

39

Quello che stai facendo in questo caso è affidarsi a Date#toString() che ha già uno schema fisso. Per convertire un oggetto Java Date in un altro modello String leggibile, è necessario 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); 
} 

Tra l'altro, l'eccezione "data di analizzarlo" può qui solo venire scagliati dal SimpleDateFormat#parse(). Ciò significa che lo inputDate non è nel modello previsto "yyyy-MM-dd HH:mm:ss z". Probabilmente dovrai modificare il pattern in modo che corrisponda allo schema attuale di inputDate.

Aggiornamento: Va bene, ho fatto un test:

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); 
} 

viene stampato correttamente:

03.01.2010 21:32:27 

(sono in GMT-4)

Update 2: come da tua modifica, hai davvero uno ParseException su quello. La parte più sospetta sarebbe quindi il fuso orario di UTC. Questo è in realtà noto come nel tuo ambiente Java? Quale versione di Java e quale versione del sistema operativo stai usando? Controllare TimeZone.getAvailableIDs(). Ci deve essere un UTC in mezzo.

+0

Il problema è che la riga Date date = formatter.parse (inputDate); genera un'eccezione. Ho corretto il formato di input in yyyy-MM-dd HH: mm: ss z ma genera comunque un'eccezione. –

+0

Mi aspettavo di vedere la mia modifica che è stata aggiunta prima di commentare. Se desideri ulteriore assistenza nel trovare il modello giusto, dovrai pubblicare un esempio del valore ** actual ** 'inputDate'. – BalusC

+1

Ho riscontrato questo problema per analizzare questa data: "11/10/2011 06:03:19 p.m." – DkAngelito