如何将datestring转换为date或日历对象?
我有一个date的String
表示forms,我需要从中创build一个Date
或Calendar
对象。 我已经浏览了Date
和Calendar
API,但是除了创build我自己的丑陋的分析方法之外,没有发现任何可以做到的事情。 我知道一定有办法,有没有人知道解决scheme?
简单来说:
DateFormat formatter = new SimpleDateFormat("MM/dd/yy"); try { Date date = formatter.parse("01/29/02"); } catch (ParseException e) { e.printStackTrace(); }
有关更多信息,请参阅SimpleDateFormat
javadoc 。
把它变成一个Calendar
,做:
Calendar calendar = Calendar.getInstance(); calendar.setTime(date);
TL;博士
LocalDate.parse( "2015-01-02" )
java.time
Java 8和更高版本有一个新的java.time框架,使这些其他答案过时。 这个框架受到JSR 310定义的Joda-Time的启发,并由ThreeTen-Extra项目扩展。 参见教程 。
旧的捆绑类java.util.Date/.Calendar非常麻烦和混乱。 避免他们。
LocalDate
像Joda-Time一样,java.time有一个LocalDate
类来表示没有时间和没有时区的只有date的值。
ISO 8601
如果inputstring是yyyy-MM-dd
的标准ISO 8601格式,则可以要求该类直接parsingstring,而无需指定格式化程序。
在java.time中默认使用ISO 8601格式,用于parsing和生成date – 时间值的string表示。
LocalDate localDate = LocalDate.parse( "2015-01-02" );
格式化
如果您有不同的格式,请从java.time.format包中指定一个格式化程序。 您可以指定自己的格式化模式,也可以让java.time自动根据指定人类语言的语言Locale
自动进行本地化,以便翻译和文化规范,以确定问题(如句点与逗号)。
格式化模式
阅读DateTimeFormatter
类doc以获取格式模式中使用的代码的详细信息。 它们与旧的过时的java.text.SimpleDateFormat
类模式有所不同。
请注意parse
方法的第二个参数是如何添加到Java 8及更高版本的方法引用 。
String input = "January 2, 2015"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US ); LocalDate localDate = LocalDate.parse ( input , formatter );
转储到控制台。
System.out.println ( "localDate: " + localDate );
localDate:2015-01-02
自动本地化
或者,而不是指定格式化模式,让java.time为您定位。 调用DateTimeFormatter.ofLocalizedDate
,并确保指定所需的/期望的Locale
而不是依赖于JVM的当前默认值,它可以在运行时(!)的任何时候改变。
String input = "January 2, 2015"; DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ); formatter = formatter.withLocale ( Locale.US ); LocalDate localDate = LocalDate.parse ( input , formatter );
转储到控制台。
System.out.println ( "input: " + input + " | localDate: " + localDate );
input:2015年1月2日| localDate:2015-01-02
备受好评的乔达时间库也值得一看。 这是用于Java 7的新的date和时间api的基础。该devise是整洁,直观, 有据可查的,并避免了原始java.util.Date
/ java.util.Calendar
类的许多笨拙。
Joda的DateFormatter
可以将stringparsing为Joda DateTime
。
尝试这个:
DateFormat.parse(String)
DateFormat
类有一个parse
方法。
有关更多信息,请参阅http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html 。