如何将日期转换为yyyy-MM-dd格式?

2012年12月1日00:00:00 GMT

我必须将上述日期转换为以下格式

2012年12月1日

我怎么能够?

我试过以下方法,但它没有工作

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

用这个。

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

你会得到输出

 2012-12-01 

更新我的答案现在已经过时了。 Joda-Time项目现在处于维护模式,建议迁移到java.time类。 请参阅Ole VV的答案中的现代解决方案。

乔达时间

NidhishKrishnan接受的答案是正确的。

为了好玩,这里是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 ); 

跑的时候……

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

您无法格式化Date本身。 您只能在String获取格式化结果。 使用其他人提到的SimpleDateFormat

此外, deprecated. getter methods in Date中的大多数getter methods in Date deprecated.

现代答案:使用java.time LocalDate ,现代Java日期和时间API及其toString方法:

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

这打印

2012年12月1日

日期(无论我们是在谈论java.util.Date还是java.time.LocalDate )都没有格式。 所有它都是一个生成一些格式的toString方法,你不能改变toString方法。 幸运的是, LocalDate.toString生成了您要求的格式。

Date类很久了,你尝试使用的SimpleDateFormat类非常麻烦。 我建议你忘记那些类,而是使用java.time 。 现代API可以更好地使用。

除了:您从遗留API中获取一个您无法更改或不想立即更改的日期。 你可以做的最好的事情是将它转换为java.time.Instant并从那里做任何进一步的操作:

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

如果没有恰好是亚洲/贝鲁特,请替换您想要的时区。 然后按上述步骤操作。

链接: Oracle教程:Date Time ,解释如何使用java.time