2011-08-22 13 views
12

Tengo este bloque de código donde el argumento dateFormat.format siempre será un string por eso hice .toString() aquí. Recibo el error "No se puede formatear Objeto dado como una Fecha".SimpleDateFormat String

¿Hay alguna manera de hacer esto? Tenga en cuenta que la cadena proviene de la base de datos. Usé la nueva fecha() como muestra aquí.

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

No está claro lo que está tratando de lograr en última instancia – Bozho

Respuesta

21

DateFormat#format acepta una cita, no una cadena.

Uso

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

Si usted tiene una cadena procedente de la base de datos que es un formato específico y que desea convertir en una fecha, se debe utilizar el método parse.

@Sonesh - Supongamos que tiene una cadena en la base de datos que representa una Fecha (¿sería mejor almacenar el objeto en la base de datos como fechas?), Entonces primero parse al formato que deseaba y luego format al formato de cadena que deseaba.

// 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 el método 'parse()' acepta una cadena. el método 'format()' acepta una Fecha. – Marcelo

+0

@Marcelo: Mi error. –

+0

en mi caso, siempre tendrá una cadena para formatear si la analizara y utilizara el formato? –

6

Hay dos aplicaciones de SimpleDateFormat:

  • analizar una cadena - cuando se tiene una fecha representada como una cadena, y que desea obtener el Date objeto correspondiente. A continuación, utilice dateFormat.parse(string)

  • formato de una fecha - cuando se tiene un objeto Date y desea darle formato de una manera específica (por lo general con el fin de mostrar a un usuario). En ese caso utilizar dateFormat.format(date)

Los dos métodos son recíprocos - se tiene una fecha y devuelve una cadena, y el otro toma una cadena y devuelve una fecha.

Para su caso particular, quizás necesite .parse(..). Pero tenga en cuenta que cada controlador de base de datos 'que se respete' debería tener una opción para devolver un Date en lugar de una representación de cadena. Si está almacenando fechas como cadena en el DB, no haga eso. Use el tipo de fecha nativo.

+0

+1 buena explicación. –

+0

Intenté usar el análisis sintáctico obteniendo el error. "Fecha inaplicable:" Lun Aug 22 16:10:16 GMT + 00: 00 2011 "". SimpleDateFormat dateFormat = new SimpleDateFormat ("MMMMM dd, yyyy"); \t \t Fecha parsedDate = dateFormat.parse (new Date().Encadenar()); \t \t Cadena sCertDate = dateFormat.format (parsedDate); –

+2

, obviamente, el formato que especifique y el formato de la fecha son bastante diferentes. – Bozho

4

Si necesita leer una fecha con formato y los resultados a otro formato de la secuencia una cadena, se necesitan 2 formateadores, por ejemplo:

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

Intenté este outputFormat.format (inputFormat.parse (new Date(). ToString())); Y el error es "Fecha inaplicable:" Lun Aug 22 16:10:16 GMT + 00: 00 2011 "" –

+1

@Sonesh necesita un formato de fecha adecuado para analizar "Lun Aug 22 16:10:16 GMT + 00: 00 2011 ". "aaaa-MM-dd" analiza fechas como "2010-11-25". – Marcelo

Cuestiones relacionadas