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

目录

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);

    }
}

运行结果如下:

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

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

代码如下:

import java.time.ZoneId;

public class ZoneID {
    public static void main(String[] args) {

        System.out.println(ZoneId.getAvailableZoneIds());
    }

}    

运行结果如下:

        当然还有很多,没列举完。可以根据以上的时区,通过 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);
    }
}

运行结果如下:

       

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

https://blog.csdn.net/Tingfeng__/article/details/133839673?spm=1001.2014.3001.5501

        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);

    }
}

运行结果如下:

         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);


    }
}

运行结果如下:

        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);

    }
}

运行结果如下:

        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);
    }
}

运行结果如下:

        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));
    }
}

运行结果如下:

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

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



猜你喜欢

转载自blog.csdn.net/Tingfeng__/article/details/133842602