在Java中以不同格式parsingstring

我想以不同的格式将String转换为Date

例如,

我从用户那里得到,

 String fromDate = "19/05/2009"; // ie (dd/MM/yyyy) format 

我想把它从Date转换为"yyyy-MM-dd"格式的Date对象

我该怎么做?

看看SimpleDateFormat 。 代码是这样的:

 SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd"); try { String reformattedStr = myFormat.format(fromUser.parse(inputString)); } catch (ParseException e) { e.printStackTrace(); } 

使用SimpleDateFormat类:

 private Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = new SimpleDateFormat(format); return formatter.parse(date); } 

用法:

 Date date = parseDate("19/05/2009", "dd/MM/yyyy"); 

为了提高效率,您可能希望将格式器存储在散列表中。 hashmap是你的util类的一个静态成员。

 private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>(); public static Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = hashFormatters.get(format); if (formatter == null) { formatter = new SimpleDateFormat(format); hashFormatters.put(format, formatter); } return formatter.parse(date); } 

检查java.text.SimpleDateFormat的javadocs它描述了你需要的一切。

将stringdate转换为java.sql.Date

 String fromDate = "19/05/2009"; DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date dtt = df.parse(fromDate); java.sql.Date ds = new java.sql.Date(dtt.getTime()); System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010 

虽然SimpleDateFormat确实可以满足您的需求,另外您也许会想要查看Joda Time ,它显然是Java 7中重做date库的基础。虽然我没有使用过很多,但我什么也没听到关于它的事情,如果你在你的项目中广泛的操纵date,它可能是值得研究的。

TL;博士

 LocalDate.parse( "19/05/2009" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ) 

细节

java.util.Datejava.sql.DateSimpleDateFormat的其他答案现在已经过时。

LocalDate

做date时间的现代方法是使用java.time类,特别是LocalDateLocalDate类代表没有时间和没有时区的只有date的值。

DateTimeFormatter

要parsing或生成表示date时间值的string,请使用DateTimeFormatter类。

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ); LocalDate ld = LocalDate.parse( "19/05/2009" , f ); 

不要将date – 时间对象与表示其值的string混合。 date – 时间对象没有格式 ,而string。 date时间对象(如LocalDate )可以生成一个string来表示其内部值,但date时间对象和string是单独的不同对象。

您可以指定任何自定义格式来生成一个string。 或者让java.time做自动本地化的工作。

 DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ) .withLocale( Locale.CANADA_FRENCH ) ; String output = ld.format( f ); 

转储到控制台。

 System.out.println( "ld: " + ld + " | output: " + output ); 

ld:2009-05-19 | 输出:mardi 19 mai 2009

请参阅IdeOne.com的操作 。


关于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 (上文提到)。
    • 请参阅如何使用…。

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

格式化date并转换为string的简单方法

  Date date= new Date(); String dateStr=String.format("%td/%tm/%tY", date,date,date); System.out.println("Date with format of dd/mm/dd: "+dateStr); 

输出:格式为dd / mm / dd的date:21/10/2015