欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

使用LocalDate,LocalTime和LocalDateTime

发布时间:2023/12/3 编程问答 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用LocalDate,LocalTime和LocalDateTime 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Java 8对日期和时间API进行了重大更改,这是在JSR 310:日期和时间API的 JDK中包括了Joda Time API 。 此JSR由Joda Time的创建者Stephen Colebourne领导。

有许多惊人的API可用于日期和时间。 在本文中,我将介绍最常用的: java.time.LocalDate , java.time.LocalTime和java.time.LocalDateTime 。 这些代表独立于时区的日期和时间值。 因此,它们依靠系统时钟来捕获值。

创建一个实例

让我们来看看使用创建它们的实例的方式now()方法和工厂方法of()

jshell> LocalDate.now() $46 ==> 2018-07-07jshell> LocalDate.of(2018, 3, 30) $47 ==> 2018-03-30jshell> LocalTime.now() $48 ==> 00:32:06.883656jshell> LocalTime.of(12,43,12,33333); $49 ==> 12:43:12.000033333jshell> LocalDateTime.now() $50 ==> 2018-07-07T00:32:30.335562400jshell> LocalDateTime.of(2018, 12, 30, 12,33) $51 ==> 2018-12-30T12:33jshell> LocalDateTime.of(LocalDate.now(), LocalTime.now()) $52 ==> 2018-07-07T00:40:38.198318200

处理日期和时间

让我们看一下如何操作或修改创建的日期和时间实例:

jshell> LocalDate d = LocalDate.now() d ==> 2018-07-07jshell> d.plusDays(12) $54 ==> 2018-07-19jshell> d d ==> 2018-07-07jshell> d.plusMonths(2) $56 ==> 2018-09-07jshell> d.minusDays(5) $57 ==> 2018-07-02jshell> d.minusWeeks(4) $58 ==> 2018-06-09

这些plus*()和minus*()方法是不可变的,并返回一个新的日期和时间实例。 在上面的示例中,我们看到了几种方法来操纵java.time.LocalDate的组件。 在类似的行上,有plus*()和minus*()方法用于处理java.time.LocalTime和java.time.LocalDateTime的组件。

比较日期和时间实例

我们想知道给定的日期和时间是在另一个日期之前还是之后,在这种情况下,我们将使用isBefore()和isAfter()方法,如下所示:

jshell> var d1 = LocalDate.of(2018, 7, 6) d1 ==> 2018-07-06jshell> var d2 = LocalDate.of(2018, 7, 7) d2 ==> 2018-07-07jshell> d1.isAfter(d2) $64 ==> falsejshell> d1.isBefore(d2) $65 ==> truejshell> var dt1 = LocalDateTime.of(2018, 7, 7, 12, 30) dt1 ==> 2018-07-07T12:30jshell> var dt2 = LocalDateTime.of(2018, 7, 7, 14, 30) dt2 ==> 2018-07-07T14:30jshell> dt1.isBefore(dt2) $68 ==> truejshell> dt1.isAfter(dt2) $69 ==> false

在字符串和日期对象表示之间转换

通常,我们需要将日期和时间的String表示形式转换为其相应的对象,并且还将该对象转换为String表示形式。 对于较旧的日期类java.util.Date我们使用java.text.SimpleDateFormat解析字符串为日期,反之亦然。 在新的日期时间API中,为同一任务引入了新类java.time.format.DateTimeFormatter 。

如果遵循在字符串和对象表示形式之间转换日期的ISO标准,由于java.time.format.DateTimeFormatter提供了预定义的ISO格式,因此图层和应用程序之间的许多集成将变得无缝。 让我们看一下实际情况:

jshell> import java.time.*jshell> LocalDateTime ldt = LocalDateTime.now() ldt ==> 2018-09-26T22:58:32.229096300jshell> import java.time.format.*jshell> ldt.format(DateTimeFormatter.ISO_DATE) $4 ==> "2018-09-26"jshell> ldt.format(DateTimeFormatter.ISO_DATE_TIME) $5 ==> "2018-09-26T22:58:32.2290963"jshell> ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) $9 ==> "2018-09-26T22:58:32.2290963"jshell> ldt.format(DateTimeFormatter.BASIC_ISO_DATE) $10 ==> "20180926"

我们甚至可以使用自定义格式设置模式,如下所示:

jshell> ldt.format(DateTimeFormatter.ofPattern("d-M-y")); $11 ==> "26-9-2018"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MM-y hh:mm:ss")); $12 ==> "26-09-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d/MMM/y hh:mm:ss")); $13 ==> "26/Sep/2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y hh:mm:ss")); $14 ==> "26-Sep-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y hh:mm:ss")); $15 ==> "26-Sep-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y HH:mm:ss")); $16 ==> "26-Sep-2018 22:58:32"

可以在Javadoc中的java.time.format.DateTimeFormatter找到用于创建模式的不同规则。

让我们看一下将日期和时间的有效String表示形式转换为LocalDateTime及其相关对象:

<br />jshell> LocalDate ld = LocalDate.parse("2018-09-26") ld ==> 2018-09-26jshell> LocalDateTime ldt = LocalDateTime.parse("2018-09-26T22:24:33") ldt ==> 2018-09-26T22:24:33

您可以看到,在上面的代码中,我们没有提供用于解析字符串的模式,而是使用了默认的ISO格式。 通过API交换日期和时间值时,此方法非常有用。

这样,我展示了一些基本的操作,您可以使用与时区无关的新日期和时间实例进行操作。 在接下来的文章中,我将写有关时区的时间,查找持续时间,时间和日期之间的时间段以及如何使用不同的日历系统。

翻译自: https://www.javacodegeeks.com/2018/10/localdate-localtime-localdatetime.html

总结

以上是生活随笔为你收集整理的使用LocalDate,LocalTime和LocalDateTime的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。