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

Java 如何将日期字符串转换为日期或日历对象?,java,date,calendar,Java,Date,Calendar,我有一个日期的字符串表示,我需要从中创建日期或日历对象。我已经浏览了Date和Calendarapi,但除了创建自己的难看解析方法之外,还没有找到任何其他方法可以做到这一点。我知道一定有办法,有人知道解决办法吗?试试这个: DateFormat.parse(String) 简言之: DateFormat formatter = new SimpleDateFormat("MM/dd/yy"); try { Date date = formatter.parse("01/29/02"); }

我有一个日期的
字符串
表示,我需要从中创建
日期
日历
对象。我已经浏览了
Date
Calendar
api,但除了创建自己的难看解析方法之外,还没有找到任何其他方法可以做到这一点。我知道一定有办法,有人知道解决办法吗?

试试这个:

DateFormat.parse(String)
简言之:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}
更多信息,请参阅

要将其转换为日历,请执行以下操作:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

DateFormat
类有一个
parse
方法


有关更多信息,请参阅。

备受推崇的也值得一看。这是Java7的新版本的基础。该设计简洁、直观,避免了原始
java.util.Date
/
java.util.Calendar
类的许多笨拙之处

Joda可以将字符串解析为Joda
DateTime

tl;博士 java.time Java8和更高版本有一个新的框架,使得这些其他答案过时了。该框架受到项目的启发、定义和扩展。看

旧的捆绑类java.util.Date/.Calendar是出了名的麻烦和混乱。避开它们

LocalDate
与Joda Time一样,java.Time有一个类来表示一个只包含日期的值,该值不包含一天中的时间,也不包含时区

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

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

LocalDate localDate = LocalDate.parse( "2015-01-02" );
格式化程序 如果您有不同的格式,请从包中指定一个格式化程序。您可以指定自己的格式模式,也可以让java.time根据需要自动本地化为
区域设置
指定用于翻译的人类语言和用于确定句点与逗号等问题的文化规范

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

请注意,
parse
方法的第二个参数是如何添加到Java8和更高版本的语法的

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为您本地化。调用CalizedDate的
DateTimeFormatter.ofLocalizedDate
,并确保指定所需的/预期的
Locale
,而不是依赖JVM的当前默认设置,该默认设置在运行时的任何时刻都可能更改(!)

转储到控制台

System.out.println ( "input: " + input + " | localDate: " + localDate );
输入:2015年1月2日|当地日期:2015-01-02


虽然Joda Time作为第一个良好的日期时间库非常成功,但Joda Time团队现在建议迁移到框架中。如果原始字符串可以是MM/dd/yy或yy/MM/dd呢?Cristina我也面临同样的问题。我不知道服务器发送的是什么格式。现在@Matt Sheppard你有什么建议吗?非常好的概述!这个答案应该被接受。仅供参考,像和
java.text.SimpleTextFormat
这样麻烦的旧日期时间类现在被这些类取代了。看见
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 );