¿Cómo convertir la fecha en formato aaaa-MM-dd?

Sáb, dic 01 00:00:00 GMT 2012

Tengo que convertir la fecha anterior en el formato siguiente

2012-12-01

¿Cómo puedo?

He intentado con el siguiente método pero no funciona

public Date ConvertDate(Date date){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String s = df.format(date); String result = s; try { date=df.parse(result); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return date; } 

Utilizar esta.

 java.util.Date date = new Date("Sat Dec 01 00:00:00 GMT 2012"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String format = formatter.format(date); System.out.println(format); 

obtendrá la salida como

 2012-12-01 

ACTUALIZAR Mi respuesta aquí ahora está desactualizada. El proyecto Joda-Time ahora está en modo de mantenimiento, aconsejando la migración a las clases java.time . Vea la solución moderna en la Respuesta de Ole VV .

Joda-Time

La respuesta aceptada por NidhishKrishnan es correcta.

Para divertirse, este es el mismo tipo de código en Joda-Time 2.3.

 // © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. // import org.joda.time.*; // import org.joda.time.format.*; java.util.Date date = new Date(); // A Date object coming from other code. // Pass the java.util.Date object to constructor of Joda-Time DateTime object. DateTimeZone kolkataTimeZone = DateTimeZone.forID( "Asia/Kolkata" ); DateTime dateTimeInKolkata = new DateTime( date, kolkataTimeZone ); DateTimeFormatter formatter = DateTimeFormat.forPattern( "yyyy-MM-dd"); System.out.println( "dateTimeInKolkata formatted for date: " + formatter.print( dateTimeInKolkata ) ); System.out.println( "dateTimeInKolkata formatted for ISO 8601: " + dateTimeInKolkata ); 

Cuando se ejecuta …

 dateTimeInKolkata formatted for date: 2013-12-17 dateTimeInKolkata formatted for ISO 8601: 2013-12-17T14:56:46.658+05:30 
 String s; Format formatter; Date date = new Date(); // 2012-12-01 formatter = new SimpleDateFormat("yyyy-MM-dd"); s = formatter.format(date); System.out.println(s); 

No puede formatear la Date sí. Solo puede obtener el resultado formateado en String . Use SimpleDateFormat como lo mencionaron otros.

Además, la mayoría de los getter methods in Date están en deprecated.

Respuesta moderna: utilice LocalDate desde java.time , la moderna API de fecha y hora de Java, y su método toString :

  LocalDate date = LocalDate.of(2012, Month.DECEMBER, 1); // get from somewhere String formattedDate = date.toString(); System.out.println(formattedDate); 

Esto imprime

2012-12-01

Una fecha (si estamos hablando de java.util.Date o java.time.LocalDate ) no tiene un formato. Todo lo que tiene es un método toString que produce algún formato, y no puede cambiar el método toString . Afortunadamente, LocalDate.toString produce exactamente el formato que usted solicitó.

La clase Date está obsoleta hace tiempo, y la clase SimpleDateFormat que intentó utilizar es notoriamente problemática. Te recomiendo que te olvides de esas clases y usas java.time en java.time lugar. La API moderna es mucho más agradable para trabajar.

Excepto: sucede que obtienes una Date de una API heredada que no puedes cambiar o no quieres cambiar en este momento. Lo mejor que puede hacer con esto es convertirlo a java.time.Instant y realizar otras operaciones desde allí:

  Date oldfashoinedDate = // get from somewhere LocalDate date = oldfashoinedDate.toInstant() .atZone(ZoneId.of("Asia/Beirut")) .toLocalDate(); 

Por favor, sustituya su zona horaria deseada si no fuera Asia / Beirut. Luego proceda como se indica arriba.

Enlace: tutorial de Oracle: Fecha y hora , explicando cómo usar java.time .