如何将datestring转换为date或日历对象?

我有一个date的String表示forms,我需要从中创build一个DateCalendar对象。 我已经浏览了DateCalendar 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