LocalDateTime用法
发布日期:2021-06-28 19:37:34 浏览次数:2 分类:技术文章

本文共 2620 字,大约阅读时间需要 8 分钟。

一.新时间日期API常用、重要对象介绍

  • ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
  • Instant: 用来表示时间线上的一个点(瞬时)
  • LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
  • LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
  • LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的
  • Clock: 用于访问当前时刻、日期、时间,用到时区
  • Duration: 用秒和纳秒表示时间的数量(长短),用于计算两个日期的“时间”间隔
  • Period: 用于计算两个“日期”间隔

其中,LocalDate、LocalTime、LocalDateTime是新API里的基础对象,绝大多数操作都是围绕这几个对象来进行的,有必要搞清楚:

LocalDate : 只含年月日的日期对象

LocalTime :只含时分秒的时间对象
LocalDateTime : 同时含有年月日时分秒的日期对象

二.API详解与示例

2.1获取当前时间

2.2根据指定日期/时间创建对象

2.3日期时间的加减

  • 对于LocalDate,只有精度大于或等于日的加减,如年、月、日;
  • 对于LocalTime,只有精度小于或等于时的加减,如时、分、秒、纳秒;
  • 对于LocalDateTime,则可以进行任意精度的时间相加减;

2.4将年、月、日等修改为指定的值,并返回新的日期(时间)对象

其效果与时间日期相加减差不多,如今天是2018-01-13,要想变为2018-01-20有两种方式

a. localDate.plusDays(20L) -> 相加指定的天数
b. localDate.withDayOfYear(20) -> 直接指定到哪一天

2.5获取日期的年月日周时分秒

2.6时间日期前后的比较与判断

2.7时间戳

事实上Instant就是java8以前的Date,可以使用以下两个类中的方法在这两个类型之间进行转换,

比如Date.from(Instant)就是用来把Instant转换成java.util.date的,而new Date().toInstant()就是将Date转换成Instant的

2.8计算时间、日期间隔

Duration:用于计算两个“时间”间隔

Period:用于计算两个“日期”间隔

//计算两个日期的日期间隔-年月日LocalDate date1 = LocalDate.of(2018, 2, 13);LocalDate date2 = LocalDate.of(2017, 3, 12);//内部是用date2-date1,所以得到的结果是负数Period period = Period.between(date1, date2);System.out.println("相差年数 : " + period.getYears());System.out.println("相差月数 : " + period.getMonths());System.out.println("相差日数 : " + period.getDays());//还可以这样获取相差的年月日System.out.println("-------------------------------");long years = period.get(ChronoUnit.YEARS);long months = period.get(ChronoUnit.MONTHS);long days = period.get(ChronoUnit.DAYS);System.out.println("相差的年月日分别为 : " + years + "," + months + "," + days);//注意,当获取两个日期的间隔时,并不是单纯的年月日对应的数字相加减,而是会先算出具体差多少天,在折算成相差几年几月几日的        //计算两个时间的间隔System.out.println("-------------------------------");LocalDateTime date3 = LocalDateTime.now();LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);Duration duration = Duration.between(date3, date4);System.out.println(date3 + " 与 " + date4 + " 间隔  " + "\n"        + " 天 :" + duration.toDays() + "\n"        + " 时 :" + duration.toHours() + "\n"        + " 分 :" + duration.toMinutes() + "\n"        + " 毫秒 :" + duration.toMillis() + "\n"        + " 纳秒 :" + duration.toNanos() + "\n"        );//注意,并没有获得秒差的,但既然可以获得毫秒,秒就可以自行获取了

2.9当计算程序的运行时间时,应当使用时间戳Instant

2.10使用自定义格式

自定义转化的格式一定要与日期类型对应

  • LocalDate只能设置仅含年月日的格式
  • LocalTime只能设置仅含时分秒的格式
  • LocalDateTime可以设置含年月日时分秒的格式

2.11将时间字符串形式转化为日期对象

注:格式的写法必须与字符串的形式一样

2018-01-13 21:27:30 对应 yyyy-MM-dd HH:mm:ss
20180113213328 对应 yyyyMMddHHmmss  否则会报运行时异常!

但要记住:得到的最终结果都是类似2018-01-13T21:27:30的格式,因为在输出LocalDateTime对象时,会调用其重写的toString方法。

2.12将时间日期对象转为格式化后的时间日期对象

2.13long毫秒值转换为日期

 

 

转载地址:https://blog.csdn.net/xxdw1992/article/details/112761525 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:安卓OnClick的四种方法
下一篇:第三方电子签名框架

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月27日 08时09分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

阿里、腾讯大厂Android面试必问知识点系统梳理,满满干货指导 2019-04-29
阿里大神最佳总结Flutter进阶学习笔记,内容太过真实 2019-04-29
阿里巴巴内部Jetpack宝典意外流出!送大厂面经一份! 2019-04-29
阿里正式启动2021届春季校招!字节跳动Android面试凉凉经,实战解析 2019-04-29
阿里珍藏版Android框架体系架构手写文档,原理+实战+视频+源码 2019-04-29
零基础也能看得懂!2021中级Android开发面试解答,附赠课程+题库 2019-04-29
震惊!靠着这份面试题跟答案,复习指南 2019-04-29
Android最强保活黑科技的最强技术实现,深度解析,值得收藏 2019-04-29
Android架构师必备框架技能核心笔记,面试心得体会 2019-04-29
Android架构师必备框架技能核心笔记,高级面试题+解析 2019-04-29
android热修复框架对比,12年高级工程师的“飞升之路”,含泪整理面经 2019-04-29
Android多线程实现方式及并发与同步,技术详细介绍 2019-04-29
Android开发究竟该如何学习,成功入职字节跳动 2019-04-29
三年老Android经验面经,看看这篇文章吧! 2019-04-29
为什么Android要采用Binder作为IPC机制?成功入职腾讯 2019-04-29
海量算法高频面试题精编解析,附超全教程文档 2019-04-29
深入浅出Android性能调优,系列篇 2019-04-29
深入浅出Android性能调优,附大厂真题面经 2019-04-29
深入解析Android-AutoLayout,全网疯传 2019-04-29
深入解析android核心组件和应用框架,最全Android知识总结 2019-04-29