在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.Date
, java.sql.Date
和SimpleDateFormat
的其他答案现在已经过时。
LocalDate
做date时间的现代方法是使用java.time类,特别是LocalDate
。 LocalDate
类代表没有时间和没有时区的只有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.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 (上文提到)。
- 请参阅如何使用…。
ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等 。
格式化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