如何将日期字符串转换为日期或日历对象?

时间:2008-09-04 13:54:18

标签: java date calendar

我有一个String表示我需要创建DateCalendar对象的日期。我查看了DateCalendar API,但除了创建自己的丑陋的解析方法之外,还没有找到任何可以做到这一点的内容。我知道必须有办法,有没有人知道解决方案?

5 个答案:

答案 0 :(得分:126)

简而言之:

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);

答案 1 :(得分:14)

TL;博士

LocalDate.parse( "2015-01-02" )

java.time

Java 8及更高版本有一个新的java.time框架,使这些其他答案过时了。此框架的灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展。请参阅Tutorial

旧的捆绑类java.util.Date/.Calendar是众所周知的麻烦和混乱。避免它们。

LocalDate

与Joda-Time一样,java.time有一个类LocalDate来表示没有时间且没有时区的仅限日期的值。

ISO 8601

如果您的输入字符串采用标准ISO 8601格式yyyy-MM-dd,则可以要求该类直接解析字符串,而无需指定格式化程序。

ISO 8601格式在java.time中默认使用,用于解析和生成日期时间值的字符串表示。

LocalDate localDate = LocalDate.parse( "2015-01-02" );

格式化

如果您使用其他格式,请从java.time.format包中指定格式化程序。您可以指定自己的格式模式,也可以让java.time自动本地化为Locale,指定用于翻译的人类语言和用于决定句点与逗号等问题的文化规范。

格式化模式

阅读DateTimeFormatter课程文档,了解格式模式中使用的代码的详细信息。它们与过时的java.text.SimpleDateFormat类模式略有不同。

注意parse方法的第二个参数是method reference,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 );
  

输入:2015年1月2日| localDate:2015-01-02

答案 2 :(得分:9)

备受推崇的Joda Time library 值得一看。这是用于Java 7的新date and time api的基础。该设计简洁,直观,well documented并且避免了原始java.util.Date / {{1}的大量笨拙类。

Joda的DateFormatter可以将字符串解析为Joda java.util.Calendar

答案 3 :(得分:0)

试试这个:

DateFormat.parse(String)

答案 4 :(得分:0)

DateFormat类有parse方法。

有关详细信息,请参阅http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html