我如何更改Java中的date格式?

我需要使用Java从更改date格式

dd/MM/yyyy to yyyy/MM/dd 

如何使用SimpleDateFormat从一种date格式转换为另一种:

 final String OLD_FORMAT = "dd/MM/yyyy"; final String NEW_FORMAT = "yyyy/MM/dd"; // August 12, 2010 String oldDateString = "12/08/2010"; String newDateString; SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT); Date d = sdf.parse(oldDateString); sdf.applyPattern(NEW_FORMAT); newDateString = sdf.format(d); 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); sdf.format(new Date()); 

这应该做的伎俩

使用SimpleDateFormat

  String DATE_FORMAT = "yyyy/MM/dd"; SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); System.out.println("Formated Date " + sdf.format(date)); 

完整的例子:

 import java.text.SimpleDateFormat; import java.util.Date; public class JavaSimpleDateFormatExample { public static void main(String args[]) { // Create Date object. Date date = new Date(); // Specify the desired date format String DATE_FORMAT = "yyyy/MM/dd"; // Create object of SimpleDateFormat and pass the desired date format. SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); /* * Use format method of SimpleDateFormat class to format the date. */ System.out.println("Today is " + sdf.format(date)); } } 

TL;博士

 LocalDate.parse( "23/01/2017" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK ) ).format( DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK ) ) 

2017年1月23日

避免遗留的date时间类

克里斯托弗帕克的答案是正确的,但已经过时了。 诸如java.util.Datejava.util.Calendarjava.text.SimpleTextFormat类的麻烦的date时间类现在是遗留的 ,被java.time类取代。

使用java.time

将inputstringparsing为date – 时间对象,然后以所需的格式生成新的String对象。

LocalDate类代表没有时间和没有时区的只有date的值。

 DateTimeFormatter fIn = DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK ); // As a habit, specify the desired/expected locale, though in this case the locale is irrelevant. LocalDate ld = LocalDate.parse( "23/01/2017" , fIn ); 

为输出定义另一个格式化程序。

 DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK ); String output = ld.format( fOut ); 

2017年1月23日

顺便说一句,考虑使用标准的ISO 8601格式表示date时间值的string。


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。

从何处获取java.time类?

  • Java SE 8Java SE 9和更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6Java SE 7
    • 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
  • Android的
    • ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
    • 请参阅如何使用ThreeTenABP …。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter 等等 。


乔达时间

更新: Joda-Time项目现在处于维护模式 ,团队build议迁移到java.time类。 这部分是为了历史而留下的。

为了好玩,这里是他的代码适合使用Joda时间库。

 // © 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.*; final String OLD_FORMAT = "dd/MM/yyyy"; final String NEW_FORMAT = "yyyy/MM/dd"; // August 12, 2010 String oldDateString = "12/08/2010"; String newDateString; DateTimeFormatter formatterOld = DateTimeFormat.forPattern(OLD_FORMAT); DateTimeFormatter formatterNew = DateTimeFormat.forPattern(NEW_FORMAT); LocalDate localDate = formatterOld.parseLocalDate( oldDateString ); newDateString = formatterNew.print( localDate ); 

转储到控制台…

 System.out.println( "localDate: " + localDate ); System.out.println( "newDateString: " + newDateString ); 

当运行…

 localDate: 2010-08-12 newDateString: 2010/08/12 
 SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy"); Date myDate = newDateFormat.parse("28/12/2013"); newDateFormat.applyPattern("yyyy/MM/dd") String myDateString = newDateFormat.format(myDate); 

现在MyDate = 2013/12/28

这只是克里斯托弗帕克的答案适应从Java 8中使用新的1类:

 final DateTimeFormatter OLD_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy"); final DateTimeFormatter NEW_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd"); String oldString = "26/07/2017"; LocalDate date = LocalDate.parse(oldString, OLD_FORMATTER); String newString = date.format(NEW_FORMATTER); 

1好了,不再新了,Java 9应该很快就会发布。

或者你可以去正则expression式路线:

 String date = "10/07/2010"; String newDate = date.replaceAll("(\\d+)/(\\d+)/(\\d+)", "$3/$2/$1"); System.out.println(newDate); 

它也适用于两种方式。 当然,这不会实际validation你的date,也可以用于像“21432/32423/52352”这样的string。 你可以使用"(\\d{2})/(\\d{2})/(\\d{4}"来更准确地表示每个组中的位数,但是它只能从dd / MM / yyyy到yyyy / MM / dd,而不是相反的方式(仍然接受无效的数字,像45),如果你给它一些像“blabla”这样的无效数据,它只会返回相同的东西。

许多方法来改变date格式

 private final String dateTimeFormatPattern = "yyyy/MM/dd"; private final Date now = new Date(); final DateFormat format = new SimpleDateFormat(dateTimeFormatPattern); final String nowString = format.format(now); final Instant instant = now.toInstant(); final DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateTimeFormatPattern).withZone(ZoneId.systemDefault()); final String formattedInstance = formatter.format(instant); /* Java 8 needed*/ LocalDate date = LocalDate.now(); String text = date.format(formatter); LocalDate parsedDate = LocalDate.parse(text, formatter); 

要更改您所需要的date格式,请在下面的格式中find。

  String stringdate1 = "28/04/2010"; try { SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy"); Date date1 = format1.parse() SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd"); String stringdate2 = format2.format(date1); } catch (ParseException e) { e.printStackTrace(); } 

这里stringdate2date格式为yyyy/MM/dd 。 它包含2010年4月28日。

 SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd"); System.out.println(format1.format(date));