• Home
  • Archives
  • 随笔
所有文章 友链 关于我

  • Home
  • Archives
  • 随笔

jdk8时间类解析以及常见用例

发布于: 2020-06-07
更新于: 2023-07-09

jdk8 时间

JDK8 下可替换为新的类进行处理:LocalDateTime,Instant-> 时间戳,Duration时间段,Clock时钟类,ZoneId时区,ZoneOffset时区补偿

    // 获取系统当前时间
    LocalDateTime now=LocalDateTime.now();

    // 底层代码
    // clock拿到当前时区,Zone做时区偏移量
    public static LocalDateTime now(Clock clock) {
        Objects.requireNonNull(clock, "clock");
        Instant now = clock.instant();
        ZoneOffset offset = clock.getZone().getRules().getOffset(now);
        return ofEpochSecond(now.getEpochSecond(), now.getNano(), offset);
    }

    // 通过instant算出date和时间对象,进行组装使用
    public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset) {
        Objects.requireNonNull(offset, "offset");
        ChronoField.NANO_OF_SECOND.checkValidValue((long)nanoOfSecond);
        long localSecond = epochSecond + (long)offset.getTotalSeconds();
        long localEpochDay = Math.floorDiv(localSecond, 86400);
        int secsOfDay = Math.floorMod(localSecond, 86400);
        LocalDate date = LocalDate.ofEpochDay(localEpochDay);
        LocalTime time = LocalTime.ofNanoOfDay((long)secsOfDay * 1000000000L + (long)nanoOfSecond);
        return new LocalDateTime(date, time);
    }

对比之前版本优点

变化点 优点
线程安全性 代码如下,所有类均为不可变的,包含对象,不像 SimpleDateFormat
可读性 比起之前的复杂转化模式,现在有具体的时间类对象实现业务逻辑,LocalDate,Clock,Duration 等
API 所有时间类都有方便的时间操作 API,plusDays()等等。
public final class LocalDateTime implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
    public static final LocalDateTime MIN;
    public static final LocalDateTime MAX;
    private static final long serialVersionUID = 6207766400415563566L;
    private final LocalDate date;
    private final LocalTime time;

涉及 API 包

  • 包
    • java.time 基础包
    • java.time.chrono 日历系统
    • java.time.temporal 时态对象,用起找到特定日期,时间等
    • java.time.zone 时区

涉及用例

  • 时间转化
LocalDateTime startTime=LocalDateTime.parse(str1,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
  • 间隔
Duration duration=Duration.between(startTime,endTime);
// api参考截图

20200607165407

jdk8时间类解析以及常见用例
/archives/3ea64f5b/
作者
tyrantqiao
发布于
2020-06-07
更新于
2023-07-09
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • Java
  • jdk

扫一扫,分享到微信

微信分享二维码
mysql亿级数据迁移
java日常业务开发注意点
© 2024 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 所有文章
  • 友链
  • 关于我

tag:

  • 复盘
  • 我
  • 规划
  • java
  • 面试
  • 源码
  • 架构
  • Hadoop
  • HTTP
  • TCP
  • 学习笔记
  • IDEA
  • maven
  • idea
  • Java
  • jdk
  • 面经
  • linux
  • 爱情
  • mysql
  • 性能
  • sql
  • Mysql
  • JAVA
  • 技术
  • Redis
  • MQ
  • Spring
  • 数据库
  • TIDB
  • spring
  • unity
  • chatgpt
  • 经验分享
  • 前端
  • redis
  • vue
  • git
  • shadowsocks
  • hexo
  • blog
  • bug
  • 开发
  • 业务
  • jvm
  • 算法
  • MySQL
  • nginx
  • Linux
  • mq
  • db
  • springCloud
  • ssh
  • python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 性格
  • 音乐
  • 程序员
  • 随笔
  • mybatis
  • 演讲
  • 域名
  • 猫咪
  • 她
  • github
  • 计划
  • 旅游
  • 软件
  • 心理
  • 情商
  • 幽默
  • 才艺
  • 穿搭
  • 编程
  • 排序
  • 查找
  • 缓存
  • 网络
  • 设计模式
  • c
  • 课程设计
  • centos
  • 数学
  • 本网站主题yilia设计者的主页
如果有问题或者想讨论的可以联系[email protected]或者[email protected]