首页 > 作文

一篇文章弄懂Java8中的时间处理

更新时间:2023-04-04 13:20:32 阅读: 评论:0

目录
前言loc脱贫攻坚心得体会aldatetimezoneddatetimeinstant总结

前言

java8借鉴了第三方日期库joda很多的优点

java.time包

类名描述instant时间戳duration持续时间,时间差localdate只包含日期,比如:2020-05-20localtime只包含时间,比如:13:14:00locald写作业时适合听的歌atetime包含日期和时间,比如:2020-05-20 13:14:00period时间段zoneofft时区偏移量,比如:+8:00zoneddatetime带时区的时间clock时钟,比如获取目前美国纽约的时间

java.time.format包

类名描述datetimeformatter时间格式化

java8提供了全新的时间处理框架,这里就可以完全丢弃之前的date、calendar了。

具体的api的使用都是比较简单的。这里就不展开介绍了。

这里主要介绍下一些主要的类

localdatetime

我们一般常用的就是这个了,用这个来表示日期时间。如localdatetime.now()就可以基于当前默认时区得到当前的日期时间。

由于全球有好多时区,同一个日期时间,在不同的时区,反映到时间轴上是不同的。

localdatetime类型的日期时间是没包含时区,所以它不能对应到时间轴上。说的直白点就是localdatetime不能转换成自 1970-01-01t00:00:00z 纪元以来的毫秒数

zoneddatetime

zoneddatetime可以理解就是在localdatetime的基础上添加上时区,所以它是可以反映到时间轴上的。

下面用夏令时举个例子来看看localdatetime和localdatetime的区别。

夏令时是什么这里就不展开了,具体可以网上查下。看看我国1986开始的夏令时。

简单来说就是在夏令时开始的时候,将时钟向后拨1个小时。对应我国1986年开始的夏令时的做法,就是在每年四月中旬的第一个星2020新春对联大全集期日当时钟到达凌晨2点时,直接将时钟拨到凌晨3点。也就是凌晨1点和凌晨3点之间之差1个小时。

由于1986年是开始实施的,所以1986年的夏令时是1986年5月4日开始的。

我们看看1987年的夏令时开始

根据我国当时的夏令时政策,1987年应该是1987年4月12日开始的。具体来说就是在1987-04-12 01:00:00 过一个小时后,时间应该是1987-04-12 03:00:00

        localdatetime localdatetime = localdatetime.of(1987, 4, 12, 1, 0, 0, 0);        system.out.println(localdatetime);        system.out.println(localdatetime.plushours(1));

执行上面的代码就可以看到当1987-04-12 01:00:00增加1小时后,时间是1987-04-12 02:00:00。

这个也好理解,因为localdatetime并没有包含时区,1987-04-12 02:00:00这个夏令时只是中国的,并不是全球统一的,如果1987-04-12 02:00:00将直接变成1987-04-12 03:00:00放到中国以外的其他国家就是错误的。

        zoneddatetime zoneddatetime = zoneddatetime.of(1987, 4, 12, 1, 0, 0, 0, zoneid.systemdefault());        system.out.println(zoneddatetime);        system.out.println(zoneddatetime.plushours(1));

执行上面的代码可以看到当1987-04-12 01:00:00增加1小时后,时间变成了是1987-04-12 03:00:00。这个也就能说明问题了。

同时从打印结果也能看到时区自动从+08:00[asia/shanghai]变成了+09:00[asia/shanghai]

instant

instant表示时间轴上的一个瞬时时间,简单来说就是表示自 1970-01-01t00:00:00z 纪元以来的秒数、毫秒数等等

zoneddatetime和instant都能对应到时间轴上,所以它们两个是可以相互转化的。

        instant instant = zoneddatetime.toinstant();        zoneddatetime zoneddatetime1 = instant.atzone(zoneddatetime.getzone());

其他一些常用的各种类型之间转化的api

        //zoneddatetime 转  instant        instant instant = zoneddatetime.now().toinstant();         //获取utc毫秒数        long epochmilli = instant.toepochmilli();                //instant 转  zoneddatetime        zoneddatetime zoneddatetime = instant.atzone(zoneid.systemdefaul高校排行榜t());        //字符串 转  zoneddatetime        zoneddatetime zoneddatetime2 = zoneddatetime.par(zoneddatetime.tostring());        //基于utc 偏移的毫秒数        int totalconds = zoneddatetime.getofft().gettotalconds();        //instant 转  localdatetime        localdatetime localdatetime = localdatetime.ofinstant(instant, zoneid.systemdefault());        //localdatetime 转  zoneddatetime        zoneddatetime zoneddatetime1 = localdatetime.atzone(zoneid.systemdefault());        zonerules zonerules = zoneid.systemdefault().天津财经大学是985还是211getrules();        //判断是否是夏令时时间        boolean daylightsavings = zonerules.isdaylightsavings(instant);        calendar calendar = calendar.getinstance(timezone.getdefault());        //calendar 转 instant        instant instant1 = calendar.toinstant();        //calendar  转   zoneddatetime        calendar now = calendar.getinstance();        zoneddatetime zdt = zoneddatetime.ofinstant(now.toinstant(), zoneid.systemdefault()));        //date 转 instant        date date = new date();        instant inst = date.toinstant();        // instant 转 date        date newdate = date.from(inst);        //gregoriancalendar 转 zoneddatetime        gregoriancalendar cal = gregoriancalendar.from(zoneddatetime.now());        timezone tz = cal.gettimezone();        zoneddatetime zdt1 = cal.tozoneddatetime();                //zoneddatetime 转 gregoriancalendar        gregoriancalendar newcal = gregoriancalendar.from(zdt1);        localdatetime ldt = zdt.tolocaldatetime();        localdate date2 = zdt.tolocaldate();        localtime time2 = zdt.tolocaltime();

更详细的资料,还是看官方的文档吧。/d/file/titlepic/

本文发布于:2023-04-04 13:20:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b132c3464b2585325ec56118322ffdfc.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:一篇文章弄懂Java8中的时间处理.doc

本文 PDF 下载地址:一篇文章弄懂Java8中的时间处理.pdf

标签:时间   夏令时   时区   日期
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图