2011-01-24 19 views
5

sto recuperando un datetime da un DB SQLite, che esce in formato ...formato una stringa datetime in volta solo

2011-01-24 02:45:00 

In C# posso semplicemente utilizzare DateTime.Parse("2011-01-24 02:45:00").ToString("HH:mm") al fine di ottenere la stringa 02:45

È un modo per farlo in Android/Java? Il mio codice nella mia app Android si presenta così ...

// dateStr below is logging as correctly being yyyy-MM-dd HH:mm:ss format 
String dateStr = cursor.getString(cursor.getColumnIndex("start_time")); 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
String shortTimeStr = sdf.format(dateStr); // <-- throws IllegalArgumentException 

EDIT: grazie sia doc_180 e Konstantin Burov - gli esempi forniti hanno aiutato a risolvere il problema. Parte del problema era che stavo importando java.sql.Date invece di java.util.Date. Ho cambiato le cose e ora funziona perfettamente per me.

+0

SimpleDateFormat richiede un argomento di data, non una stringa. Dovresti memorizzare la tua data come millisecondo e creare un oggetto data da quello. Data d = new Date (dateAsMillisec) e quindi passare a semplicateformat. –

+0

@ doc_180: OK scusa, hai ragione, probabilmente devi ripensare alla mia domanda. Il mio problema è che il mio DB sul lato Android è un "mirror" di un DB SQLite dell'app basato su PC che usa quel formato datetime lungo/inverso e vorrei mantenere i formati allo stesso modo. Ho provato a utilizzare Date.parse (String) poi sdf.format (...) ma ho anche generato un'eccezione. – Squonk

+0

Hai provato il mio codice. Funziona e ho controllato. –

risposta

11

Hai bisogno di fare quanto segue.

try { 
    Date date = null; 
    date = df.parse("2011-01-24 02:45:00"); 
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
    String shortTimeStr = sdf.format(date); 
    System.out.println(shortTimeStr); 
} catch (ParseException e) { 
    // To change body of catch statement use File | Settings | File Templates. 
    e.printStackTrace(); 
} 

Come già detto nel commento, è necessario memorizzare il tempo in millisecondi anziché in stringa Altrimenti, non vedo altro che creare un oggetto middleman Date.

+0

Grazie, vedi il mio EDIT alla fine della mia domanda. Penso che la memorizzazione di una data così lunga (millisecondi) potrebbe essere un modo per andare in futuro, ma al momento sto facendo il mirroring di un DB SQLite per PC creato da qualcun altro, quindi mi trovo con gli stessi formati tra PC/Android. – Squonk

+3

cos'è df qui ??? – Androiduser

+0

Che cosa significa df? – Rick

2

SimpleDateFormat.format prevede la data o il calendario come argomento mentre si passa una stringa. Converti prima la stringa in data.

String dateStr = cursor.getString(cursor.getColumnIndex("start_time")); 
SimpleDateFormat toFullDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date fullDate = toFullDate.parse(dateStr); 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
String shortTimeStr = sdf.format(fullDate); 

E data sì, preferirei memorizzati per il tempo nel database, in modo da ottenere un oggetto Date allora sarebbe più banale:

Long dateMilliseconds = cursor.getLong(cursor.getColumnIndex("start_time")); 
Date fullDate = new Date(dateMilliseconds); 
+0

Grazie, vedi il mio EDIT alla fine della mia domanda. Penso che la memorizzazione di una data così lunga (millisecondi) potrebbe essere un modo per andare in futuro, ma al momento sto facendo il mirroring di un DB SQLite per PC creato da qualcun altro, quindi mi trovo con gli stessi formati tra PC/Android. – Squonk

Problemi correlati