Como converter data no formato aaaa-MM-dd?

Sáb Dez 01 00:00:00 GMT 2012

Eu tenho que converter a data acima no formato abaixo

2012-12-01

Como posso?

Eu tentei com o seguinte método, mas não está funcionando

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

Usa isto.

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

você terá a saída como

 2012-12-01 

ATUALIZAÇÃO Minha resposta aqui está desatualizada. O projeto Joda-Time está agora no modo de manutenção, aconselhando a migration para as classs java.time . Veja a solução moderna na Resposta da Ole VV .

Joda-Time

A resposta aceita por NidhishKrishnan está correta.

Por diversão, aqui está o mesmo tipo de código no 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 ); 

Quando correr …

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

Você não pode formatar a própria Date . Você só pode obter o resultado formatado em String . Use SimpleDateFormat conforme mencionado por outros.

Além disso, a maioria dos getter methods in Date são deprecated.

Resposta moderna: use LocalDate de java.time , a moderna API de data e hora de Java e seu método toString :

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

Isso imprime

2012-12-01

Uma data (se estamos falando de java.util.Date ou java.time.LocalDate ) não possui um formato. Tudo o que tem é um método toString que produz algum formato, e você não pode alterar o método toString . Felizmente, LocalDate.toString produz exatamente o formato que você pediu.

A class Date está muito desatualizada e a class SimpleDateFormat que você tentou usar é notoriamente problemática. Eu recomendo que você esqueça essas classs e use java.time . A API moderna é muito mais agradável de se trabalhar.

Exceto: acontece que você recebe uma Date de uma API legada que não pode ser alterada ou que não deseja alterar agora. A melhor coisa que você pode fazer é convertê-lo para java.time.Instant e fazer qualquer outra operação a partir daí:

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

Por favor, substitua o fuso horário desejado, se não for Ásia / Beirute. Então proceda como acima.

Link: tutorial do Oracle: Date Time , explicando como usar java.time .