如何将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
,而不是一个已经被parsing的Date
对象。
请参考以下方法。 它将您的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.Date
, Calendar
和SimpleDateFormat
。
Joda-Time项目现在处于维护模式 ,build议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。
从何处获取java.time类?
- Java SE 8和SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和SE 7
- 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
- Android的
- ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
- 请参阅如何使用ThreeTenABP …。
ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等 。
希望这会帮助别人。
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));