当前位置: 首页 > 后端技术 > Java

Java项目还需要joda吗?

时间:2023-04-02 10:29:51 Java

由于众所周知的原因,旧Java中的日期处理是一个非常不可用的API,不得不使用。此外,它常常令人困惑且容易出错。相信大家应该都用过jodaDatetime对象救人于水火吧。简直就是活菩萨。到了JDK8之后的版本了,还需要用joda吗?结论正式地,joda项目不再被主动维护。Joda-time不再积极开发,除了保持时区数据是最新的。从JavaSE8开始,要求用户迁移到java.time(JSR-310)-JDK的核心部分,它取代了这个项目。上面原文是Joda不再积极开发,只是维护一些时区数据。您应该可以使用java.time实现的所有功能。简单地说,如果你使用的是JDK8之后的版本,你可以慢慢地从你的项目中移除Joda。如果您仍在使用早期版本,您仍然需要导入它。从官方代码来看,已经一年多没有提交代码了。还是觉得有点遗憾,可能很多人习惯了DateTimetonew然后再进行一堆计算。如果需要获取当前时间,请为JDK使用java.time。Date-TimeAPI的核心类之一是Instant类,它表示时间轴上纳秒的开始。Instant类返回的值计算自1970年1月1日第一秒(1970-01-01T00:00:0Z)以来的时间,也称为EPOCH。在纪元之前发生的瞬间具有负值,在纪元之后发生的瞬间具有正值。Instant不包含年月日等单位。但是可以转换为LocalDateTime或者ZonedDateTime,如下ConvertanInstant+defaulttimezonetoaLocalDateTime。ZonedDateTime或OffsetTimeZone对象都可以转换为Instant对象,因为它们都映射到时间轴上的精确时刻。然而,事实并非如此。要将Instant对象转换为ZonedDateTime或OffsetDateTime对象,需要时区或时区偏移信息。我们可以在下面检查这些代码片段:Instantinstant=Instant.now();System.out.println("------");System.out.println(instant.toString());System.out.println(instant.truncatedTo(ChronoUnit.SECONDS).toString());System.out.println(instant.toString());ZonedDateTimezonedDateTime=ZonedDateTime.now();System.out.println("------");System.out.println(zonedDateTime.toString());System.out.println(zonedDateTime.toInstant().toString());日期date=newDate();System.out.println("------");System.out.println(date.toString());System.out.println(date.toInstant().toString());对应的输出为:2021-08-13T18:20:18.977845200Z2021-08-13T18:20:18Z2021-08-13T18:20:18.977845200Z2021-08-13T14:20:18.977845200Z2021-08-13T18:20:18.977845200Z2021-08-13T14:20:18992847200/2000[New_America]-08-13T18:20:1992847200ZFRAUG1314:20:18EDT20212021-08-13T18:20:18.993Z根据上面的理解,Instant对象获取的是当前UTC时间。如果此时不想显示毫秒,可以使用truncatedTo方法格式化显示。Instant类是不可变的(immutable),所以即使在truncatedTo之后你也不能改变Instant对象。除非你创造一个新的。使用ZonedDateTime创建对象和创建Date对象是一样的,都是获取当前时区的时间。比如我们现在是美国东部时间,那么上面两个对象会获取当前电脑时间,上面两??个对象还提供了toInstant()方法,会显示当前时间对应的UTC时间.从输出中可以看出。我们将在后续的学习文章中逐步列出一些具体的转换。一些结论是:Instant在new之后是不可变的,并且总是指向UTC时间。如果需要将本地时间与时区进行转换,需要在转换时加上时区偏移量。Date和ZonedDateTime是使用带有时区的本地计算机的时间创建的。Date和ZonedDateTime都可以转换为Instant而无需添加时区偏移量。https://www.ossez.com/t/java-...