How do I convert the date from one format to another date object in another format without using any deprecated classes?
我想将date1格式的日期转换为date2格式的日期对象。
1 2 3 4 5 6 7 8 9 | 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 |
使用
1 2 3 4 | 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 |
另请注意,
TL;博士
1 2 3 4 | LocalDate.parse( "January 08, 2017" , DateTimeFormatter.ofPattern("MMMM dd, uuuu" , Locale.US ) ).format( DateTimeFormatter.BASIC_ISO_DATE ) |
使用java.time
问题和其他答案使用麻烦的旧日期时间类,现在是旧的,由java.time类取代。
您有仅限日期的值,因此请使用仅限日期的类。
1 2 3 4 |
您所需的输出格式由ISO 8601标准定义。对于仅日期值,"扩展"格式为YYYY-MM-DD,例如
我强烈建议使用扩展格式以提高可读性。但是如果你坚持基本格式,那格式化程序就被预定义为名为
1 |
请参阅IdeOne.com上的此代码。
ld.toString(): 2017-01-08
output: 20170108
关于java.time
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
-
Java SE 8和SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小功能和修复。
-
Java SE 6和SE 7
- 许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。
-
Android的
- ThreeTenABP项目特别适用于Android的ThreeTen-Backport(如上所述)。
- 请参见如何使用ThreeTenABP ....
ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的类,例如
使用Java 8,我们可以实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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"
请参考以下方法。它将您的日期String作为argument1,您需要指定日期的现有格式
作为参数2,结果(预期)格式为参数3。
请参阅此链接以了解各种格式:
可用日期格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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; } |
Kotlin相当于
1 2 3 | fun getFormattedDate(originalFormat: SimpleDateFormat, targetFormat: SimpleDateFormat, inputDate: String): String { return targetFormat.format(originalFormat.parse(inputDate)) } |
用法(在Android中):
1 2 3 4 5 | getFormattedDate( SimpleDateFormat(FormatUtils.d_MM_yyyy, Locale.getDefault()), SimpleDateFormat(FormatUtils.d_MMM_yyyy, Locale.getDefault()), dateOfTreatment ) |
注意:常量值:
1 2 3 4 5 | // 25 Nov 2017 val d_MMM_yyyy ="d MMM yyyy" // 25/10/2017 val d_MM_yyyy ="d/MM/yyyy" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; String fromDateFormat ="dd/MM/yyyy"; String fromdate = 15/03/2018; //Take any date String CheckFormat ="dd MMM yyyy";//take another format like dd/MMM/yyyy String dateStringFrom; Date DF = new Date(); try { //DateFormatdf = DateFormat.getDateInstance(DateFormat.SHORT); DateFormat FromDF = new SimpleDateFormat(fromDateFormat); FromDF.setLenient(false); // this is important! Date FromDate = FromDF.parse(fromdate); dateStringFrom = new SimpleDateFormat(CheckFormat).format(FromDate); DateFormat FromDF1 = new SimpleDateFormat(CheckFormat); DF=FromDF1.parse(dateStringFrom); System.out.println(dateStringFrom); } catch(Exception ex) { System.out.println("Date error"); } output:- 15/03/2018 15 Mar 2018 |
试试这个
这是将一种日期格式更改为另一种日期格式的最简单方法
1 2 3 4 5 6 7 8 9 10 11 | public String changeDateFormatFromAnother(String date){ @SuppressLint("SimpleDateFormat") DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); @SuppressLint("SimpleDateFormat") DateFormat outputFormat = new SimpleDateFormat("dd MMMM yyyy"); String resultDate =""; try { resultDate=outputFormat.format(inputFormat.parse(date)); } catch (ParseException e) { e.printStackTrace(); } return resultDate; } |
希望这会对某人有所帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); } |
1 2 3 4 5 6 7 8 9 | //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)); |