进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)ZoneId 类 ZonedDateTim 类和 Instant 类是 Java8 中用于处理时区和时间戳的类

大家好,欢迎来到IT知识分享网。

目录

API        

        1.0 ZoneId 类的说明

        1.1 如何创建 ZoneId 类的对象呢?

        1.2 ZoneId 类中的 getAvailableZoneIds() 静态方法

        2.0 ZoneDateTime 类的说明

        2.1 如何创建 ZoneDateTime 类的对象呢?

        3.0 Instant 类的说明

        3.1 如何创建 Instant 类的对象呢?

         3.2 如何获取其他时区的时间戳?

        3.3 Instant 类中的 getEpochSecond() 实例方法

        3.4 Instant 类中的 getNano() 实例方法

        3.5 Instant 类中的 equals()、isBefore()、isAfter() 实例方法


API        

        1.0 ZoneId 类的说明

        ZoneId 类是 Java 8 中引入的一个类,用于表示时区的标识符。它是一个不可变的类,可以用于创建时区对象、获取时区信息、转换时区等操作。

        1.1 如何创建 ZoneId 类的对象呢?

        可以通过 systemDefault() 静态方法来获取当前系统默认的时区,也可以通过 of(String zoneId) 静态方法来获取指定时区标识符创建 ZoneId 对象。

代码如下:

import java.time.ZoneId; public class ZoneID { public static void main(String[] args) { //获取默认时区 ZoneId zoneId = ZoneId.systemDefault(); System.out.println(zoneId); //获取指定时区 ZoneId zoneId1 = ZoneId.of("Asia/Shanghai"); System.out.println(zoneId1); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        1.2 ZoneId 类中的 getAvailableZoneIds() 静态方法

        获取所有可用的时区标识符。

代码如下:

import java.time.ZoneId; public class ZoneID { public static void main(String[] args) { System.out.println(ZoneId.getAvailableZoneIds()); } } 

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        当然还有很多,没列举完。可以根据以上的时区,通过 of() 静态方法去创建相对应的对象。

        2.0 ZoneDateTime 类的说明

        ZoneDateTime 类是 Java 8 中引入的一个类,它是 LocalDateTime 类的子类,用于表示带有时区信息的日期和时间。它包含了日期、时间和时区的信息,并提供了一系列操作方法来处理日期和时间的转换、比较和计算。

        2.1 如何创建 ZoneDateTime 类的对象呢?

        可以通过 now() 静态方法创建当前系统默认的带时区的日期时间对象,也可以通过 now(ZoneId zone )  静态方法创建指定时区的日期时间对象。

代码如下:

import java.time.ZoneId; import java.time.ZonedDateTime; public class ZoneID { public static void main(String[] args) { ZonedDateTime zonedDateTime = ZonedDateTime.now(); System.out.println(zonedDateTime); ZoneId zoneId = ZoneId.of("America/Marigot"); ZonedDateTime zonedDateTime1 = ZonedDateTime.now(zoneId); System.out.println(zonedDateTime1); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

       

          ZoneDateTime 类中的实例方法跟 LocalDateTime 类(介绍在下面的链接)中的实例方法大致相同,这里就不多赘述了。

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        3.0 Instant 类的说明

        Instant 类是 Java 8 中引入的一个类,用于表示时间戳,即从 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)开始的秒数。它是一个不可变的类,可以用于获取当前的时间戳、进行时间戳的比较和计算等操作。

        3.1 如何创建 Instant 类的对象呢?

        可以通过 now() 静态方法来创建当前时间戳。

代码如下:

import java.time.Instant; public class Text_Instant { public static void main(String[] args) { Instant istand = Instant.now(); System.out.println(istand); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

         3.2 如何获取其他时区的时间戳?

代码如下:

import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; public class Text_Instant { public static void main(String[] args) { //先找到适合的需要的时区,创建ZoneId对象 ZoneId zoneId = ZoneId.of("America/Port_of_Spain"); //然后根据 now() 方法传入ZoneId对象来创建ZonedDateTime ZonedDateTime zonedDateTime = ZonedDateTime.now(zoneId); //再有ZonedDateTime类中实例方法 toInstant() 得到 Instant类型的对象。 Instant instant = zonedDateTime.toInstant(); System.out.println(instant); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        3.3 Instant 类中的 getEpochSecond() 实例方法

        获取时间戳的秒数。

代码如下:

import java.time.Instant; public class Text_Instant { public static void main(String[] args) { Instant instant = Instant.now(); long a = instant.getEpochSecond(); System.out.println(a); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        3.4 Instant 类中的 getNano() 实例方法

        从时间线开始,获取从第二个开始的纳秒数。

代码如下:

import java.time.Instant; public class Text_Instant { public static void main(String[] args) { Instant instant = Instant.now(); int b = instant.getNano(); System.out.println(b); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        3.5 Instant 类中的 equals()、isBefore()、isAfter() 实例方法

        equals() 方法是用来判断两个相同类型的对象,如秒、毫秒、纳秒是否相同。

        isBefore() 方法是用来判断两个相同类型的对象,如秒、毫秒、纳秒是否在调用此方法的对象之前。

        isAfter() 方法是用来判断两个相同类型的对象,如秒、毫秒、纳秒是否在调用此方法的对象之后。

代码如下(以 equals() 方法为例):

import java.time.Instant; public class Text_Instant { public static void main(String[] args) { //创建当前时间戳对象 Instant instant1 = Instant.now(); //对当前时间戳减1秒 Instant instant2 = instant1.minusSeconds(1); //对当前时间戳加300毫秒 Instant instant3 = instant1.plusMillis(300); //判断两个对象的时间戳是否相同 System.out.println(instant2.equals(instant3)); } }

运行结果如下:

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

        答案肯定是不一样的,都改变了,注意原来的时间戳对象是没有改变,只是创建了新的对象而已,这些对象都是不可变对象,内容不可改变的。

         本篇的API需要多练练手,实操一波熟练掌握即可。



免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128862.html

(0)
上一篇 2025-08-28 17:26
下一篇 2025-08-28 17:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信