Java SE基础知识(12)

知识梳理:



java 复制代码
package ZoomId;

import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Set;

public class demo1 {
    public static void main(String[] args) {
        //获取所有的时区名称
        Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
        System.out.println(availableZoneIds.size());
        System.out.println(availableZoneIds);

        //获得当前系统的默认时区
        ZoneId systemDefault = ZoneId.systemDefault();
        System.out.println(systemDefault);

        //获取指定时区
        ZoneId zoneId = ZoneId.of("Africa/Nairobi");
        System.out.println(zoneId);
    }
}

java 复制代码
package Instant;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class demo1 {
    public static void main(String[] args) {
        //1.获取当前时间的instant对象(标准时间,和我国差8小时)
        Instant now = Instant.now();
        System.out.println(now);
        //2.根据(秒/亳秒/纳秒)获取Instant对象
        Instant instant = Instant.ofEpochMilli(0L);
        System.out.println(instant);

        Instant instant1 = Instant.ofEpochSecond(1L);
        System.out.println(instant1);

        Instant instant2 = Instant.ofEpochSecond(1L, 1000000000L);
        System.out.println(instant2);

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

        //3.指定时区
        ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(zonedDateTime);

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

        //4.isXxx
        Instant instant3 = Instant.ofEpochMilli(0L);
        Instant instant4 = Instant.ofEpochMilli(1000L);
        boolean before = instant3.isBefore(instant4);
        System.out.println(before);
        boolean after = instant3.isAfter(instant4);
        System.out.println(after);

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

        //5. minus并不会更改原instant对象
        Instant instant5 = Instant.ofEpochMilli(0L);
        Instant instant6 = instant5.minusMillis(1000L);
        System.out.println(instant6);
        Instant instant7 = Instant.ofEpochMilli(1000L);
        Instant instant8 = instant7.plusMillis(1000L);
        System.out.println(instant8);

    }
}

java 复制代码
package ZoneDateTime;

import java.sql.SQLOutput;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class demo1 {
    public static void main(String[] args) {
        //1.获取当前时间对象(带时区)
        ZonedDateTime zdt = ZonedDateTime.now();
        System.out.println(zdt);

        //2.获取指定的时间对象(带时区)
        //年月日时分秒纳秒方式指定
        ZonedDateTime zdt1 = ZonedDateTime.of(2020, 10, 10, 10, 10, 10, 10,
                ZoneId.of("Asia/Shanghai"));
        System.out.println(zdt1);

        //通过instant+时区的方式指定获取时间对象
        Instant instant = Instant.ofEpochMilli(0L);
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        ZonedDateTime zdt2 = ZonedDateTime.ofInstant(instant, zoneId);
        System.out.println(zdt2);

        //3.withXxx 修改时间系列的方法
        ZonedDateTime zdt3 = zdt2.withYear(1999);
        System.out.println(zdt3);

        //4.减少时间(年)
        ZonedDateTime zdt4 = zdt3.minusYears(1);
        System.out.println(zdt4);

        //5.增加时间(月)
        ZonedDateTime zdt5 = zdt4.plusMonths(1);
        System.out.println(zdt5);

        //细节:
        //JDK8新增的时间对象都是不可变的
        //如果我们修改了,减少了,增加了时间
        //那么调用者是不会发生改变的,产生一个新的时间。
    }
}

java 复制代码
package DateTimeFormatter;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class demo1 {
    public static void main(String[] args) {
        //获取时间对象
        ZonedDateTime zdt = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        //解析
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a");
        //格式化
        System.out.println(dtf.format(zdt));
    }
}

小结:

复制代码
ZoneId:
概念:ZoneId 类代表了时区,它存储了特定地区的偏移规则。
时区是全球时间标准的一部分,确保了不同地理位置的时间一致性。例如,"Europe/Paris" 或 "America/Los_Angeles"。
作用:主要用于确定日期时间在地球上的具体位置,这对于处理跨越多个时区的时间非常重要。你可以通过它来进行日期时间的时区转换。

Instant:
概念:Instant 类是一个时间戳的表示,它表示的是从1970年1月1日0点(UTC时间)开始的秒数,精度到纳秒。它是一个无时区的绝对时间点。
作用:通常用于记录事件发生的具体时间点,如数据库记录的创建或更新时间。

ZonedDateTime:
概念:ZonedDateTime 是日期时间的完整表示,它结合了LocalDateTime(日期和时间)与ZoneId(时区),提供了一个带有具体时区信息的完整日期时间表示。
这意味着它不仅包含了日期和时间信息,还包含了这个日期时间所在的时区。
作用:当你需要同时处理日期、时间和时区时,ZonedDateTime 就显得尤为重要。
相关推荐
Tigshop开源商城1 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
坚果派·白晓明2 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
花间相见2 小时前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
X journey3 小时前
机器学习进阶(13):支持向量机SVM
算法·机器学习·支持向量机
小短腿的代码世界3 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
Tigshop开源商城3 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
洛水水3 小时前
【力扣100题】30.二叉树的直径
算法·leetcode·职场和发展
REDcker3 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
gihigo19984 小时前
Bezier曲线曲面生成算法
算法
kobesdu4 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2