如何将date从一种格式转换为另一种格式的另一种date对象而不使用任何弃用的类?

我想将date1格式的date转换为date2格式的date对象。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy"); SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd"); Calendar cal = Calendar.getInstance(); cal.set(2012, 8, 21); Date date = cal.getTime(); Date date1 = simpleDateFormat.parse(date); Date date2 = simpleDateFormat.parse(date1); println date1 println date2 

使用SimpleDateFormat#format

 DateFormat originalFormat = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH); DateFormat targetFormat = new SimpleDateFormat("yyyyMMdd"); Date date = originalFormat.parse("August 21, 2012"); String formattedDate = targetFormat.format(date); // 20120821 

还要注意, parse需要一个String ,而不是一个已经被parsingDate对象。

请参考以下方法。 它将您的datestring作为参数1,您需要将date的现有格式指定为参数2,并将结果(预期)格式指定为参数3。

请参阅此链接以了解各种格式: 可用date格式

 public static String formatDateFromOnetoAnother(String date,String givenformat,String resultformat) { String result = ""; SimpleDateFormat sdf; SimpleDateFormat sdf1; try { sdf = new SimpleDateFormat(givenformat); sdf1 = new SimpleDateFormat(resultformat); result = sdf1.format(sdf.parse(date)); } catch(Exception e) { e.printStackTrace(); return ""; } finally { sdf=null; sdf1=null; } return result; } 

TL;博士

 LocalDate.parse( "January 08, 2017" , DateTimeFormatter.ofPattern( "MMMM dd, uuuu" , Locale.US ) ).format( DateTimeFormatter.BASIC_ISO_DATE ) 

使用java.time

问题和其他答案使用麻烦的旧的date时间类,现在遗留下来,由java.time类代替。

你有只有date的值,所以使用只有date的类。 LocalDate类代表没有时间和没有时区的只有date的值。

 String input = "January 08, 2017"; Locale l = Locale.US ; DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMMM dd, uuuu" , l ); LocalDate ld = LocalDate.parse( input , f ); 

您所需的输出格式由ISO 8601标准定义。 对于只包含date的值,“扩展”格式为YYYY-MM-DD,如2017-01-08 ,最小化分隔符使用的“基本”格式为YYYYMMDD,如20170108

我强烈build议使用扩展格式的可读性。 但是如果你坚持基本格式,格式化程序在DateTimeFormatter类中名为BASIC_ISO_DATE预定义为常量。

 String output = ld.format( DateTimeFormatter.BASIC_ISO_DATE ); 

看到这个代码在IdeOne.com上运行 。

ld.toString():2017-01-08

输出:20170108


关于java.time

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

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

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

从何处获取java.time类?

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

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

希望这会帮助别人。

  public static String getDate( String date, String currentFormat, String expectedFormat) throws ParseException { // Validating if the supplied parameters is null if (date == null || currentFormat == null || expectedFormat == null ) { return null; } // Create SimpleDateFormat object with source string date format SimpleDateFormat sourceDateFormat = new SimpleDateFormat(currentFormat); // Parse the string into Date object Date dateObj = sourceDateFormat.parse(date); // Create SimpleDateFormat object with desired date format SimpleDateFormat desiredDateFormat = new SimpleDateFormat(expectedFormat); // Parse the date into another format return desiredDateFormat.format(dateObj).toString(); } 

使用Java 8,我们可以做到这一点如下:

 private static String convertDate(String strDate) { //for strdate = 2017 July 25 DateTimeFormatter f = new DateTimeFormatterBuilder().appendPattern("yyyy MMMM dd") .toFormatter(); LocalDate parsedDate = LocalDate.parse(strDate, f); DateTimeFormatter f2 = DateTimeFormatter.ofPattern("MM/d/yyyy"); String newDate = parsedDate.format(f2); return newDate; } 

输出将是:“07/25/2017”

  //Convert input format 19-FEB-16 01.00.00.000000000 PM to 2016-02-19 01.00.000 PM SimpleDateFormat inFormat = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.SSSSSSSSS aaa"); Date today = new Date(); Date d1 = inFormat.parse("19-FEB-16 01.00.00.000000000 PM"); SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd hh.mm.ss.SSS aaa"); System.out.println("Out date ="+outFormat.format(d1));