在此代码段例子中,你将学会如何解析文本字符串成的实例LocalDate,LocalTime和LocalDateTime。所有这些类都提供了一种parse()方法,该方法接受表示有效日期和时间信息的文本字符串参数,并将其转换为相应的对象。
如果传递给该parse()方法的文本字符串未表示有效的日期或时间信息,则此方法将引发RuntimeException类型DateTimeParseException异常。如果要处理此异常,则应将代码包装在try-catch块中。
让我们以下面的代码片段为例:
package org.nhooo.example.datetime; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeParseException; public class DateTimeParseDemo { public static void main(String[] args) { // 将字符串“ 2014-09-12”解析为LocalDate实例。"2014-09-12" into LocalDate instance. LocalDate date = LocalDate.parse("2014-09-12"); // 将字符串“ 2014-09-12”解析为LocalDate实例。"17:51:15: into LocalTime instance. LocalTime time = LocalTime.parse("17:51:15"); // 将字符串“ 2014-09-12”解析为LocalDate实例。"2014-09-12T17:51:15" into LocalDateTime instance. LocalDateTime dateTime = LocalDateTime.parse("2014-09-12T17:51:15"); System.out.println("date = " + date); System.out.println("time = " + time); System.out.println("dateTime = " + dateTime); try { // 当无法解析字符串时,类型为RuntimeException // DateTimeParseException将被抛出。 LocalDate date1 = LocalDate.parse("2014-02-31"); System.out.println("date1 = " + date1); } catch (DateTimeParseException e) { e.printStackTrace(); } } }
运行此代码段将产生以下结果:
date = 2014-09-12 time = 17:51:15 dateTime = 2014-09-12T17:51:15 java.time.format.DateTimeParseException: Text '2014-02-31' could not be parsed: Invalid date 'FEBRUARY 31' at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853) at java.time.LocalDate.parse(LocalDate.java:400) at java.time.LocalDate.parse(LocalDate.java:385) at org.nhooo.example.datetime.DateTimeParseDemo.main(DateTimeParseDemo.java:35) Caused by: java.time.DateTimeException: Invalid date 'FEBRUARY 31' at java.time.LocalDate.create(LocalDate.java:431) at java.time.LocalDate.of(LocalDate.java:269) at java.time.chrono.IsoChronology.resolveYMD(IsoChronology.java:560) at java.time.chrono.IsoChronology.resolveYMD(IsoChronology.java:123) at java.time.chrono.AbstractChronology.resolveDate(AbstractChronology.java:472) at java.time.chrono.IsoChronology.resolveDate(IsoChronology.java:492) at java.time.chrono.IsoChronology.resolveDate(IsoChronology.java:123) at java.time.format.Parsed.resolveDateFields(Parsed.java:351) at java.time.format.Parsed.resolveFields(Parsed.java:257) at java.time.format.Parsed.resolve(Parsed.java:244) at java.time.format.DateTimeParseContext.toResolved(DateTimeParseContext.java:331) at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1953) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849) ... 3 more
我们可以从上面的输出看,分析的文本字符串"2014-02-31"给我们DateTimeParseException,因为二月份的31是不是有效日期。