2011-08-22 8 views
12

Ho questo blocco di codice dove argomento a dateFormat.format sarà sempre un string ecco perché ho fatto .toString() qui. Ricevo l'errore "Impossibile formattare l'oggetto dato come data".SimpleDateFormat String

C'è un modo per farlo? Si noti che la stringa proviene dal database Ho usato il nuovo Date() come esempio qui.

SimpleDateFormat dateFormat = new SimpleDateFormat("MMMMM dd, yyyy"); 
String sCertDate = dateFormat.format(new Date().toString()); 
+0

non è chiaro che cosa si sta cercando di ottenere alla fine – Bozho

risposta

21

DateFormat#format accetta un appuntamento, non una stringa.

Usa

String sCertDate = dateFormat.format(new Date()); 

Se si dispone di una stringa proveniente dal database che è un formato specifico e si desidera convertire in una data, si dovrebbe utilizzare il metodo parse.

@Sonesh - Supponiamo di avere una stringa nel database che rappresenta una data (potrebbe essere preferibile memorizzare l'oggetto nel database come date?), Quindi lo si dovrebbe prima parse nel formato desiderato e quindi format nel formato di stringa desiderato.

// Assumes your date is stored in db with format 08/01/2011 
SimpleDateFormat dateFormatOfStringInDB = new SimpleDateFormat("MM/dd/yyyy"); 
Date d1 = dateFormatOfStringInDB.parse(yourDBString); 
SimpleDateFormat dateFormatYouWant = new SimpleDateFormat("MMMMM dd, yyyy"); 
String sCertDate = dateFormatYouWant.format(d1); 
+3

@ Evan il metodo 'parse()' accetta una stringa. il metodo 'format()' accetta una data. – Marcelo

+0

@Marcelo: Il mio errore. –

+0

nel mio caso avrà sempre una stringa da formattare dovrei analizzarla e usare il formato? –

6

ci sono due applicazioni di SimpleDateFormat:

  • analizzare una stringa - quando si dispone di una data rappresentata come stringa, e si desidera ottenere il corrispondente Date oggetto. Quindi utilizzare dateFormat.parse(string)

  • formato una data - quando si ha un oggetto Date e si desidera formattare in modo specifico (in genere al fine di mostrare a un utente). In questo caso utilizzare dateFormat.format(date)

I due metodi sono reciproci - si prende una data e restituisce una stringa, e l'altro prende una stringa e restituisce la data.

Per il tuo caso particolare, forse hai bisogno di .parse(..). Ma si noti che ogni driver di database "che si rispetti" dovrebbe avere un'opzione per restituire uno Date piuttosto che una rappresentazione di stringa. Se ti capita di memorizzare date come stringa nel DB, non farlo. Usa il tipo di data nativo.

+0

+1 buona spiegazione. –

+0

Ho provato a utilizzare l'errore di analisi. "Data non sostituibile:" lunedì 22 agosto alle 16:10:16 GMT + 00: 00 2011 "". SimpleDateFormat dateFormat = new SimpleDateFormat ("MMMMM dd, yyyy"); \t \t Date parsedDate = dateFormat.parse (new Date().accordare()); \t \t String sCertDate = dateFormat.format (parsedDate); –

+2

beh, ovviamente il formato specificato e il formato della data sono piuttosto diversi. – Bozho

4

Se avete bisogno di leggere una data con il formato e l'output in un altro formato stringa una stringa, è necessario 2 formattatori, ad esempio:

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); 
SimpleDateFormat outputFormat = new SimpleDateFormat("MMMMM dd, yyyy"); 
String output = outputFormat.format(inputFormat.parse(input)); 
+0

Ho provato questo outputFormat.format (inputFormat.parse (new Date(). ToString())); E l'errore è "Data Unparseable:" Mon Aug 22: 16:10:16 GMT + 00: 00 2011 "" –

+1

@Sonesh è necessario un formato Data adeguato per analizzare "Mon Aug 22 16:10:16 GMT + 00: 00 2011 ". "yyyy-MM-dd" analizza date come "2010-11-25". – Marcelo

Problemi correlati