1. 概述
在这个快速教程中,我们将**解释如何使用Java将String
转换为Instant
**,借助java.time
包中的类。首先,我们将通过LocalDateTime
类实现解决方案。然后,我们将利用Instant
类获取时区内的一个瞬间。
2. 使用LocalDateTime
类
java.time.LocalDateTime
表示没有时区的日期和/或时间。它是一个本地时间对象,意味着它只在特定上下文中有效,不能在该上下文之外使用。这个上下文通常是代码执行的机器。
要从String
获取时间,我们可以使用DateTimeFormatter
创建格式化的对象,并将此格式器传递给LocalDateTime
的parse
方法。此外,我们也可以自定义格式器或使用DateTimeFormatter
类提供的预定义格式器。
让我们看看如何使用LocalDateTime.parse()
从String
获取时间:
String stringDate = "09:15:30 PM, Sun 10/09/2022";
String pattern = "hh:mm:ss a, EEE M/d/uuuu";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern, Locale.US);
LocalDateTime localDateTime = LocalDateTime.parse(stringDate, dateTimeFormatter);
在上述示例中,我们使用LocalDateTime
类,这是表示带有时间的日期的标准类,来解析日期String
。我们也可以使用java.time.LocalDate
仅表示没有时间的日期。
3. 使用Instant
类
java.time.Instant
类是日期时间API的主要类之一,它封装了时间线上的一个点。它类似于java.util.Date
类,但提供了纳秒级精度。
在下一个示例中,我们将使用之前的LocalDateTime
获取一个带有指定ZoneId
的瞬间:
String stringDate = "09:15:30 PM, Sun 10/09/2022";
String pattern = "hh:mm:ss a, EEE M/d/uuuu";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern, Locale.US);
LocalDateTime localDateTime = LocalDateTime.parse(stringDate, dateTimeFormatter);
ZoneId zoneId = ZoneId.of("America/Chicago");
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
Instant instant = zonedDateTime.toInstant();
在此示例中,我们首先创建一个ZoneId
对象,用于标识时区,然后提供LocalDateTime
和Instant
之间的转换规则。
接下来,我们使用ZonedDateTime
,它封装了一个带有时区和相应偏移量的日期和时间。ZonedDateTime
类是日期时间API中最接近java.util.GregorianCalendar
类的类。最后,我们使用ZonedDateTime.toInstant()
方法获取一个Instant
,它将时区中的时刻调整为UTC。
4. 总结
在这篇快速教程中,我们解释了**如何使用Java将String
转换为Instant
**,利用了java.time
包中的类。如往常一样,代码片段可在GitHub上找到。