我有一个日期的String表示形式,需要从中创建一个Date或Calendar对象。 我已经浏览过Date和Calendar API,但是除了创建自己的丑陋的parse方法之外,没有找到其他可以做到这一点的东西。 我知道一定有办法,有人知道解决方案吗?
简单来说:
1 2 3 4 5 6
| DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
e.printStackTrace();
} |
有关更多信息,请参见SimpleDateFormat javadoc。
并将其转换为Calendar,请执行以下操作:
1 2
| Calendar calendar = Calendar.getInstance();
calendar.setTime(date); |
tl; dr
1
| 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格式来解析和生成日期时间值的字符串表示形式。
1
| LocalDate localDate = LocalDate.parse("2015-01-02" ); |
格式化程序
如果您使用其他格式,请从java.time.format包中指定一个格式化程序。您可以指定自己的格式设置模式,也可以根据需要自动地将java.time本地化为Locale,该Locale指定用于翻译的人类语言和文化规范,以决定诸如句点与逗号之类的问题。
格式化模式
阅读DateTimeFormatter类文档以获取有关格式模式中使用的代码的详细信息。它们与旧的过时的java.text.SimpleDateFormat类模式有所不同。
请注意parse方法的第二个参数是如何作为方法引用的,语法已添加到Java 8及更高版本中。
1 2 3
| String input ="January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter ); |
转储到控制台。
1
| System.out.println ("localDate:" + localDate ); |
localDate: 2015-01-02
自动本地化
或者,而不是指定格式化模式,让java.time为您本地化。调用DateTimeFormatter.ofLocalizedDate,并确保指定所需的/预期的Locale,而不要依赖JVM的当前默认值,该默认值可以在运行时(!)随时更改。
1 2 3 4
| String input ="January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter ); |
转储到控制台。
1
| System.out.println ("input:" + input +" | localDate:" + localDate ); |
input: January 2, 2015 | localDate: 2015-01-02
备受推崇的Joda Time库也值得一看。这是为Java 7编写的新日期和时间api的基础。该设计简洁,直观,有据可查,并且避免了原始java.util.Date / java.util.Calendar类的很多笨拙之处。
Joda的DateFormatter可以将字符串解析为Joda DateTime。
DateFormat类具有parse方法。
有关更多信息,请参见http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html。
尝试这个:
1
| DateFormat.parse(String) |