首页 > 编程语言 > javaJDK8时间类1之ZoneId时区

javaJDK8时间类1之ZoneId时区

时间:2023-07-13 23:32:29浏览次数:43  
标签:Instant System ZoneId static println 时区 out javaJDK8

一:ZoneId的介绍

ZoneId用于标识用于在Instant和LocalDateTime之间进行转换的规则。ID有两种不同的类型:

  1. •固定的偏移量-相对于UTC /格林威治标准时间的完全解析的偏移量,它对所有本地日期时间都使用相同的偏移量
  2. •地理区域-适用于查找与UTC /格林威治的偏移量的一组特定规则的区域
  3. 大多数固定偏移量由ZoneOffset表示。在任何ZoneId上调用normalized()将确保将固定的偏移量ID表示为ZoneOffset。
  4. ZoneRules定义了描述偏移量何时更改以及如何更改的实际规则。此类仅是用于获取基础规则的ID。之所以采用这种方法,是因为规则是由政府定义且频繁更改的,而该ID是稳定的。

二.举例说明

1.

  • static Set<string> getAvailableZoneIds()        获取Java中支持的所有时区
  • static ZoneId systemDefault()                   获取系统默认时区
  • static Zoneld of(string zoneld)                 获取一个指定时区

案例截图如下:

                         javaJDK8时间类1之ZoneId时区_获取当前时间

打印结果如下:

                         javaJDK8时间类1之ZoneId时区_偏移量_02

2.

  • static Instant now()                      获取当前时间的Instant对象(标准时间)
  • static Instant ofXxxx(long epochMilli)    根据(秒/毫秒/纳秒)获取Instant对象
  • ZonedDateTime atZone(ZoneIdzone)          指定时区
  • boolean isxxx(Instant otherInstant)       判断系列的方法
  • Instant minusXxx(long millisToSubtract)   减少时间系列的方法
  • Instant plusXxx(long millisToSubtract)    增加时间系列的方法

举例截图如下:

                         javaJDK8时间类1之ZoneId时区_获取当前时间_03

                         javaJDK8时间类1之ZoneId时区_偏移量_04

                         javaJDK8时间类1之ZoneId时区_获取当前时间_05

打印结果截图如下:

                         javaJDK8时间类1之ZoneId时区_获取当前时间_06

案例所有代码如下:

 public static void main(String[] args) {
                /*     static Set<string> getAvailableZoneIds()        获取Java中支持的所有时区
                       static ZoneId systemDefault()                   获取系统默认时区
                       static Zoneld of(string zoneld)                 获取一个指定时区

                                                  */

        //1.利用Set集合获取所有的时区
        Set<String> ZoneIds = ZoneId.getAvailableZoneIds();
        //利用.size()查看集合的长度
        System.out.println(ZoneIds.size());
        //打印当前的时区
        System.out.println(ZoneIds);

        //2,利用systemDefault()方法获取当前系统的默认时区
        ZoneId zoneId = ZoneId.systemDefault();
        System.out.println(zoneId);

        //3.获取指定的时区 Asia/Aqtau
        ZoneId zoneId1 = ZoneId.of("Asia/Aqtau");
        System.out.println(zoneId1);


        System.out.println("-----------------------------------");


                      /*
                   static Instant now()                      获取当前时间的Instant对象(标准时间)
                   static Instant ofXxxx(long epochMilli)    根据(秒/毫秒/纳秒)获取Instant对象
                   ZonedDateTime atZone(ZoneIdzone)          指定时区
                   boolean isxxx(Instant otherInstant)       判断系列的方法
                   Instant minusXxx(long millisToSubtract)   减少时间系列的方法
                   Instant plusXxx(long millisToSubtract)    增加时间系列的方法

                                                  */

        //1.获取当前时间的Instant对象(标准时间)
        Instant now1 = Instant.now();
        //打印结果
        System.out.println(now1);//2023-07-13T14:53:06.836319900Z

        //2.根据(秒、毫秒、纳秒等)来创建Instanr对象
        Instant instant1 = Instant.ofEpochMilli(30000L);
        System.out.println(instant1);//1970-01-01T00:00:30Z

        Instant instant2 = Instant.ofEpochSecond(40000L);
        System.out.println(instant2);//1970-01-01T11:06:40Z


        Instant instant3 = Instant.ofEpochSecond(2000L, 500000000L);
        System.out.println(instant3);//1970-01-01T00:33:20.500Z


        //3.指定时区
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Aqtau"));
        System.out.println(time);//2023-07-13T19:53:06.839406600+05:00[Asia/Aqtau]

        //4.isxxx判断
        Instant instant4 = Instant.ofEpochMilli(10L);
        Instant instant5 = Instant.ofEpochMilli(5000L);


        //5,用于时间的判断
        //isBefore: 判断调用者代表的时间是否再参数表示时间的前面
        boolean result1 = instant4.isBefore(instant5);
        System.out.println(result1);//true


        //isAfter: 判断调用者代表的时间是否再参数表示时间的后面
        boolean result2 = instant4.isAfter(instant5);
        System.out.println(result2);//flase

        //6. Instant minusXxx(long millisToSubtract)   减少时间系列的方法
        Instant instant6 = Instant.ofEpochMilli(3000L);
        System.out.println(instant6);//1970-01-01T00:00:03Z

        //减少时间系列的方法
        Instant instant7 = instant6.minusSeconds(1);
        System.out.println(instant7);//1970-01-01T00:00:02Z


        //增加时间系列的方法
        Instant instant8 = instant7.plusSeconds(200);
        System.out.println(instant8);//1970-01-01T00:03:22Z

    }

标签:Instant,System,ZoneId,static,println,时区,out,javaJDK8
From: https://blog.51cto.com/u_15912723/6717048

相关文章

  • iOS时区转换
    背景:我们开发的应用有可能会在国外使用,有一些业务又和时间有关,如果我们从手机上获取的时间不做处理直接使用就会有问题。现象:北京时间2023年7月10号20:00开启秒杀活动,用户在美国达拉斯打开活动页面显示活动还没开始。排查:应用服务器在北京,从服务器的日志中看达拉斯的用户请求时......
  • Docker容器 如何修改容器时间,时区问题修改
    1.以root身份进入容器dockerexec-it-urootb3465e6bbc5b/bin/sh可以使用date查看时间2.在容器中创建文件mkdir-p /usr/share/zoneinfo/Asia3.回到宿主机,复制宿主机里的文件到容器中docker cp /usr/share/zoneinfo/Asia/Shanghai容器ID或容器名:/usr/share/zonei......
  • 使用java中的Calendar遇到的时区问题
    项目中有一个增加1小时的工具函数结果今天测试出现了一个问题原因是1986年的9月13号到14号之间会有一个时区的转换需要程序特殊处理下这是原函数的结果SatSep1322:00:00CDT1986SatSep1323:00:00CDT1986SatSep1323:00:00CST1986SunSep1400:0......
  • 记录liunx服务器和docker时区修改
    记录服务器和docker时区修改前言我的博客是部署在docker里面的,然后我发现评论和留言的时间和北京时间是有差别的,相差8个小时,然后发现是因为容器中的时区设置与服务器是不一致的,所以需要设置一下。更改liunx服务器时区查看当前时区设置使用date命令查看当前系统时间,发现当前......
  • Linux命令行设置时区
    引言在linux安装好了过后,如果时区不正确,需要手动地对它设置我们需要的时区设置控制台输入tzselect,回车tzselect2.然后选择5“Asia”亚州,回车3.然后选择国籍9“China”中国,回车4.选择具体的时区,输入1,选择“BenjingTime”,回车5.确认所选择的内容,正确无误后输......
  • docker启动tomcat时区差了8小时
    docker启动tomcat时区差了8小时进入tomcat容器,一般在/usr/local/tomcat/bin找到目录下的catalina.sh文件,在这里修改时区大概100多行,下面这个JAVA_OPTS就是我们加进去的#OSspecificsupport.$var_must_besettoeithertrueorfalse.cygwin=falseJAVA_OPTS="-se......
  • mysql8.0设置时区
    在MySQL8.0中,可以使用以下命令查看当前数据库系统的时区设置:SELECT@@global.time_zone;该命令将返回一个字符串,表示当前数据库系统的时区设置。例如,返回如下结果:+--------------------+|@@global.time_zone|+--------------------+|SYSTEM|+------......
  • Java代码实现带时区时间字符串转为LocalDateTime对象
    不带时区时间字符串可以使用Java8中的DateTimeFormatter类来将字符串转换为LocalDateTime对象。下面是一个示例代码:importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassDateTimeConversionExample{publicstaticvoidmain(String[......
  • Springboot 链接DataSource前检查或创建库,并设置时区及sql_mode
    /**Copyright(c)2022.AsiacomTechnologyInc.Allrightsreserved*/importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Configuration;......
  • Linux与window时钟时区流程和一些小细节
    Linux与window时钟时区流程和一些小细节Linux修改时钟两种:手动和联网手动:date命令[root@hahasysconfig]#date#显示当前系统时钟2023年05月31日星期三18:00:07CST[root@hahasysconfig]#date-d"+2month"#显示现在时钟经过计算后的时钟,不会改变系统时钟,说白了就是......