如何将日期转换为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
。