java 日期 解析_Java 日期和时间解析

Java日期时间 - Java日期和时间解析

由DateTimeFormatter处理的解析是从字符串创建日期时间对象。

用于格式化的相同符号用作解析字符串值。

如果无法解析文本,则会抛出DateTimeParseException。它有两种方法来提供错误的详细信息。getErrorIndex()返回文本中的错误偏移量。getParsedString()返回正在解析的文本。

日期时间相关的类和DateTimeFormatter定义了将字符串解析为datetime对象的方法。

parse()方法从datetime类

每个datetime类有两个重载版本的parse()。parse()方法的返回类型与定义datetime类相同。

下面的代码显示了如何使用parse()方法从LocalDate对象:import java.time.LocalDate;

import java.time.format.DateTimeFormatter;

public class Main {

public static void main(String[] args) {

LocalDate ld1 = LocalDate.parse("2014-06-10");

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");

LocalDate ld2 = LocalDate.parse("06/10/2014", formatter);

System.out.println("ld1: " + ld1);

System.out.println("ld2: " + ld2);

}

}

上面的代码生成以下结果。

59e923b1ce209127f6f5d1e8fc7c451f.png

parse()从DateTimeFormatter类

DateTimeFormatter包含几个将字符串解析为datetime对象的parse()方法。

它们中的大多数返回一个TemporalAccessor对象,您可以查询它以获取datetime组件。

您可以将TemporalAccessor对象传递给datetime类的from()方法,以获取特定的datetime对象。

以下代码显示如何使用DateTimeFormatter对象解析MM/dd /yyyy格式的字符串,以构造LocalDate:import java.time.LocalDate;

import java.time.format.DateTimeFormatter;

import java.time.temporal.TemporalAccessor;

public class Main {

public static void main(String[] args) {

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");

TemporalAccessor ta = formatter.parse("06/10/2014");

LocalDate ld = LocalDate.from(ta);

System.out.println(ld);

}

}

上面的代码生成以下结果。

9b5f0af7afaec8ef5abffc74e09bc688.png

例子

parse()方法可以通过TemporalQuery将字符串直接解析为特定的datetime对象。import java.time.LocalDate;

import java.time.format.DateTimeFormatter;

public class Main {

public static void main(String[] args) {

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");

LocalDate ld = formatter.parse("06/10/2014", LocalDate::from);

System.out.println(ld);

}

}

上面的代码生成以下结果。

02063261a0d9a1a2c0a30439e71a2f97.png

Parse Best

DateTimeFormatter类包含一个parseBest()方法。

parseBest()方法尝试匹配与提供的格式的字符串可选格式符号。

在以下模式中,我们有两个可选模式。yyyy-MM-dd["T"HH:mm:ss[Z]]

文本可以完全解析为OffsetDateTime,并部分解析为LocalDateTime和LocalDate。

以下代码显示如何使用可选模式从字符串获取最佳匹配日期时间对象。import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.OffsetDateTime;

import java.time.format.DateTimeFormatter;

import java.time.format.DateTimeParseException;

import java.time.temporal.TemporalAccessor;

public class Main {

public static void main(String[] args) {

DateTimeFormatter parser = DateTimeFormatter

.ofPattern("yyyy-MM- dd["T"HH:mm:ss[Z]]");

parseStr(parser, "2014-06-31");

parseStr(parser, "2014-06-31T15:31:12");

parseStr(parser, "2014-06-31T15:31:12-0500");

parseStr(parser, "2014-06-31Hello");

}

public static void parseStr(DateTimeFormatter formatter, String text) {

try {

TemporalAccessor ta = formatter.parseBest(text, OffsetDateTime::from,

LocalDateTime::from, LocalDate::from);

if (ta instanceof OffsetDateTime) {

OffsetDateTime odt = OffsetDateTime.from(ta);

System.out.println("OffsetDateTime: " + odt);

} else if (ta instanceof LocalDateTime) {

LocalDateTime ldt = LocalDateTime.from(ta);

System.out.println("LocalDateTime: " + ldt);

} else if (ta instanceof LocalDate) {

LocalDate ld = LocalDate.from(ta);

System.out.println("LocalDate: " + ld);

} else {

System.out.println("Parsing returned: " + ta);

}

} catch (DateTimeParseException e) {

System.out.println(e.getMessage());

}

}

}

上面的代码生成以下结果。

357c63a5105d03a9000c45a83012987a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值