63

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

4

5 回答 5

126

简单来说:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}

有关更多信息,请参见SimpleDateFormatjavadoc

并将其变为Calendar,请执行以下操作:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
于 2008-09-04T13:56:37.320 回答
15

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来表示没有时间和时区的仅日期值。

ISO 8601

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

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

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

格式化程序

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

格式化模式

阅读DateTimeFormatter课程文档以获取有关格式模式中使用的代码的详细信息。它们与旧的过时的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 );

本地日期: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 日 | 本地日期:2015-01-02

于 2015-10-29T03:29:57.173 回答
9

备受推崇Joda Time 图书馆也值得一看。这是为 Java 7编写的新日期和时间 API的基础。设计简洁、直观、文档齐全,避免了许多原始java.util.Date/java.util.Calendar类的笨拙。

JodaDateFormatter可以将 String 解析为 Joda DateTime

于 2008-09-04T15:28:11.483 回答
0

试试这个:

DateFormat.parse(String)
于 2008-09-04T13:56:07.290 回答
0

该类DateFormat有一个parse方法。

有关详细信息,请参阅日期格式。

于 2008-09-04T13:57:40.547 回答