zoukankan      html  css  js  c++  java
  • Java 8 日期时间 API

    Java 8 时间 API:

    1. Instant
    2. Duration
    3. LocalDate
    4. LocalDateTime
    5. LocalTime
    6. ZonedDateTime
    7. DateTimeFormatter

    Instant

    Instant 表示某个时刻,表示从1970-01-01至今的秒数和纳秒数。

    Instant API 使用示例:

    // 1. 创建Instant对象
    Instant instant = Instant.now();
    Instant instant = Instant.ofEpochMilli(System.currentTimeMillis())
    // 2. API
    // 获取1970-01-01到现在的秒数
    instant.getEpochSecond();
    // 获取当前秒数的纳秒数
    instant.getNano();
    // 3. 时间计算
    Instant i5s = instant.plusSeconds(5);
    Instant i_5s = instant.minusSeconds(5);
    

    需要注意的是:新API的日期时间都是不变的,时间计算返回的是新的值,原始值保持不变。

    Duration

    Duration 表示某段时长,即从一个时刻到另一个时刻的时长。

    Duration API使用示例:

    // 1. 计算两个时刻的时长
    Instant first = Instant.now();
    Instant second = first.plusSeconds(35);
    Duration duration = Duration.between(first, second);
    // 2. 创建时长 ofXxx
    Duration duration = Duration.ofSeconds(5);
    // 3. 转化时长 toXxx
    long ms = duration .toMillis();
    // 4. 时间计算,跟Instant一样
    

    Duration 在超时参数使用上很有用,再也不用关注超时参数用单位是啥。

    LocalDate

    LocalDate 表示日期,不包含时间,也没有时区信息。

    LocalDate API使用示例:

    // 1. 创建LocalDate
    LocalDate d = LocalDate.now();
    LocalDate d = LocalDate.parse("2021-07-03", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    LocalDate d = LocalDate.of(2021, 7, 2);
    // 2. 调用API
    d.getYear();
    d.getMonthValue();
    d.getDayOfMonth();
    d.getDayOfWeek();
    // 3. 格式化
    DateTimeFormatter.ofPattern("yyyy-MM-dd").format(d)
    // 4. 时间计算,跟Instant一样
    // 5. 时间比较
    d.isBefore(LocalDate.now());
    d.isAfter(LocalDate.now());
    d.isEqual(LocalDate.now());
    

    LocalDateTime

    LocalDateTime 表示日期时间,包含日期和时间,但没有时区信息。

    LocalDateTime API使用示例:

    // 1. 创建LocalDate
    LocalDateTime dt = LocalDateTime.now();
    LocalDateTime dt = LocalDateTime.parse("2021-07-03 11:22:33.8", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
    LocalDateTime dt = LocalDateTime.of(2021, 7, 2, 11, 22, 33, 8);
    // 2. API
    dt.getYear();
    dt.getMonthValue();
    dt.getDayOfMonth();
    dt.getHour();
    dt.getMinute();
    dt.getSecond();
    dt.getNano();
    // 3. 格式化、时间计算、时间比较跟LocalDate一样。
    

    LocalTime

    LocalTime 表示时间,表示某天的某个时间,没有时区信息

    LocalTime API使用示例:

    // 1. 创建LocalTime
    LocalTime t = LocalTime.now();
    LocalTime t = LocalTime.parse("12:23:55", DateTimeFormatter.ofPattern("HH:mm:ss"));
    LocalTime t = LocalTime.of(0, 7, 2);
    // 2. 调用API
    t.getHour();
    t.getMinute();
    t.getSecond();
    t.getNano();
    // 3. 格式化、时间计算、时间比较跟LocalDate一样。
    

    ZonedDateTime

    ZonedDateTime 跟LocalDateTime类似都是表示日期和时间,但是不同的是,ZonedDateTime是携带时区信息的。

    ZonedDateTime API使用示例:

    // 1.创建ZoneDateTime
    ZonedDateTime dt = ZonedDateTime.now();
    // 2. 调用API
    dt.getYear();
    dt.getMonthValue();
    dt.getDayOfMonth();
    dt.getDayOfWeek();
    dt.getHour();
    dt.getMinute();
    dt.getSecond();
    // 3. 格式化、时间计算、时间比较跟LocalDate一样。
    // 4. 获取时区信息
    dt.getZone();
    dt.getOffset();
    

    DateTimeFormatter

    DateTimeFormatter 是一个用于格式化日期或时间为字符串形式的工具

    DateTimeFormatter API使用示例:

    // 时间转字符串
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(ZonedDateTime.now());
    // 字符串转时间
    LocalDateTime dt = LocalDateTime.parse("2021-07-03 11:22:33.8", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
    

    Date和新API的转化

    Date API和新日期API的转化有两个桥梁:
    (1). Instant
    (2). ZoneId

    Date新增了两个API用于对接新API:
    (1). toInstant();
    (2). from();

    LocalDateTime dt = LocalDateTime.from(new Date().toInstant().atZone(ZoneId.systemDefault()));
    System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dt));
            
    Date d = Date.from(Instant.from(dt.atZone(ZoneId.systemDefault())));
    ystem.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d));
    

    注意:不管是从Date转化为LocalDateTime,还是从LocalDateTime转化为Date都要指定时区信息。

  • 相关阅读:
    oracle中查询表中先排序再取出前10条数据
    oracle中的数据类型
    读取Oracle中的clob字段
    实现json的序列化和反序列化
    在oracle中where 子句和having子句中的区别
    Oracle Clob字段保存时提示字符串过长
    读取文件夹中的文件并修改数据库中的数据
    【转】display:none与visible:hidden的区别
    实现http访问
    动态生成并执行SQL语句
  • 原文地址:https://www.cnblogs.com/itqn/p/14969268.html
Copyright © 2011-2022 走看看