前言localdatetime、localdate、localtime 是 java8 全新的日期框架,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的,较之前的 util.date 以及 calander 使用起来更加的方便直观,下面介绍几种常见的日期对象用法。
localdatetime:日期加时间的日期对象,包含年月日时分秒localdate:日期类,包含年月日localtime:时间类,包含时分秒localdatetime获取当前时间@testpublic void test() { localdate localdate = localdate.now(); localtime localtime = localtime.now(); localdatetime localdatetime = localdatetime.now(); system.out.println(localdate:+localdate);//2023-02-22 system.out.println(localtime:+localtime);//17:25:36.590 system.out.println(localdatetime:+localdatetime);//2023-02-22t17:25:36.590}输出结果:
可以看到不用做格式转换就可以得到可读性很高的日期格式。注意:iso 8601规定的日期和时间分隔符是t。标准格式如下:
日期:yyyy-mm-dd时间:hh:mm:ss带毫秒的时间:hh:mm:ss.sss日期和时间:yyyy-mm-dd't'hh:mm:ss带毫秒的日期和时间:yyyy-mm-dd't'hh:mm:ss.sss获取当前时间的年月日时分秒@testpublic void test() { localdatetime localdatetime = localdatetime.now(); // 获取当前时间 int year = localdatetime.getyear(); // 获取年份 2023 int month = localdatetime.getmonthvalue(); // 获取月份 2 int day = localdatetime.getdayofmonth(); // 获取月中的天数 22 int hour = localdatetime.gethour(); // 获取当前的小时 17 int minute = localdatetime.getminute(); // 获取当前分钟 33 int second = localdatetime.getsecond(); // 获取当前秒数 22 system.out.println(year); system.out.println(month); system.out.println(day); system.out.println(hour); system.out.println(minute); system.out.println(second);}输出结果:
给localdatetime赋值在static目录中新建kaptcha.html页面,代码如下:
public void test() { localdatetime of = localdatetime.of(2023,2,22,22,22,22); system.out.println(of); // 输出2023-02-22t22:22:22}时间与字符串相互转换@testpublic void test() { // 将字符串转换为指定格式的时间(格式要和给定的格式一致,不然会报错) localdatetime parse = localdatetime.parse(2023-02-22 22:22:22, datetimeformatter.ofpattern(yyyy-mm-dd hh:mm:ss)); localdatetime parse1 = localdatetime.parse(2023 02 22 22:22:22, datetimeformatter.ofpattern(yyyy mm dd hh:mm:ss)); localdatetime parse2 = localdatetime.parse(2023.02.22 22:22:22, datetimeformatter.ofpattern(yyyy.mm.dd hh:mm:ss)); system.out.println(parse); // 输出2023-02-22t22:22:22 system.out.println(parse1); // 输出2023-02-22t22:22:22 system.out.println(parse2); // 输出2023-02-22t22:22:22 // 时间转字符串 localdatetime now = localdatetime.now(); datetimeformatter of = datetimeformatter.ofpattern(yyyy-mm-dd hh:mm:ss); string datetime = now.format(of); system.out.println(datetime); // 输出 2023-02-22 17:56:18}输出结果:
时间运算:加上对应时间localdatetime提供了对日期和时间进行加减的非常简单的链式调用,让时间运算变得非常简单:
@testpublic void test() { localdatetime now = localdatetime.now(); // 当前时间2023-02-22t18:00:19.352 localdatetime plusyears= now.plusyears(2); // 在当前时间加上2年2025-02-22t18:00:19.352 localdatetime plusmonths= now.plusmonths(2);// 在当前时间商加上2月2023-04-22t18:00:19.352 localdatetime plusdays= now.plusdays(2); // 在当前时间加上2天2023-02-24t18:00:19.352 localdatetime plushours= now.plushours(2); // 在当前时间加上2个小时2023-02-22t20:00:19.352 localdatetime plusminutes= now.plusminutes(30); // 在当前时间加上30分钟2023-02-22t18:30:19.352 localdatetime plusseconds = now.plusseconds(30); // 在当前时间加上30秒2023-02-22t18:00:49.352 system.out.println(now); system.out.println(plusyears); system.out.println(plusmonths); system.out.println(plusdays); system.out.println(plushours); system.out.println(plusminutes); system.out.println(plusseconds);}输出结果:
时间运算:减去对应时间@testpublic void test() { localdatetime now = localdatetime.now(); // 当前时间 localdatetime minusyears = now.minusyears(2); // 在当前时间减上2年 localdatetime minusmonths = now.minusmonths(2);// 在当前时间商减上2月 localdatetime minusdays = now.minusdays(2); // 在当前时间减上2天 localdatetime minushours = now.minushours(2); // 在当前时间减上2个小时 localdatetime minusminutes = now.minusminutes(30); // 在当前时间减上30分钟 localdatetime minusseconds = now.minusseconds(30); // 在当前时间减上30秒 system.out.println(now: + now); system.out.println(minusyears: + minusyears); system.out.println(minusmonths: + minusmonths); system.out.println(minusdays: + minusdays); system.out.println(minushours: + minushours); system.out.println(minusminutes: + minusminutes); system.out.println(minusseconds: + minusseconds);}输出结果:
两个时间比较@testpublic void test() { localdatetime now = localdatetime.now(); // 当前时间 localdatetime now1 = now.plusyears(5); // 在当前时间加上5年 // 给localdatetime 赋值 localdatetime of = localdatetime.of(2023,2,2,22,22,22); localdatetime of1 = localdatetime.of(2023,8,5,1,1,1); //两个时间作比较,第一个时间减去第二个时间(如果年份相同,比较月份,月份相同比较天数,以此类推) int compareto = now1.compareto(now); int compareto1 = now.compareto(now1); int compareto2 = now.compareto(of); int compareto3 = now.compareto(of1); system.out.println(now); // 输出 2023-02-22t20:19:44.112v system.out.println(now1); // 输出 2028-02-22t20:19:44.112 system.out.println(of); // 输出 2023-02-02t22:22:22 system.out.println(of1); // 输出 2023-08-05t01:01:01 system.out.println(compareto); // 输出 5 system.out.println(compareto1); // 输出 -5 system.out.println(compareto2); // 输出 20 system.out.println(compareto3); // 输出 -6}输出结果:
利用duration计算时间差注意没有计算相差的年和秒值,对于要计算相差的秒数,可以利用计算毫秒来进行转换
@testpublic void test() { localdatetime now = localdatetime.now(); // 当前时间 // 给localdatetime 赋值 localdatetime of = localdatetime.of(2022,2,22,2,2,2); duration duration = duration.between(of,now); // 后面减去前面 long todays = duration.between(of,now).todays(); //相差的天数 long tohours = duration.between(of,now).tohours();//相差的小时数 long tominutes = duration.between(of,now).tominutes();//相差的分钟数 long tomillis = duration.between(of,now).tomillis();//相差毫秒数 long tonanos = duration.between(of,now).tonanos();//相差的纳秒数 system.out.println(todays:+ todays); // 输出 todays:365 system.out.println(tohours:+ tohours); // 输出 tohours:8778 system.out.println(tominutes:+ tominutes); // 输出 tominutes:526732 system.out.println(tomillis:+ tomillis); // 输出 tomillis:31603973840 system.out.println(tonanos:+ tonanos); // 输出 tonanos:31603973840000000}输出结果:
改变当前时间的年月日时分秒@testpublic void test() { localdatetime now = localdatetime.now(); // 当前时间 localdatetime withyear = now.withyear(2060); // 改变当前年份(变成2060年) localdatetime withmonth = now.withmonth(12); // 改变当前月份(变成12月份) localdatetime withdayofmonth = now.withdayofmonth(28); //改变当前天数(变成28日) localdatetime withhour = now.withhour(23); // 改变当前小时数(变成23时) localdatetime withminute = now.withminute(30); // 改变当前分钟(变成30分钟) localdatetime withsecond = now.withsecond(23); // 改变当前小时数(变成23时) localdatetime withdayofyear = now.withdayofyear(60); // 从一月一号开始加上60天 system.out.println(now); system.out.println(withyear:+ withyear); system.out.println(withmonth:+ withmonth); system.out.println(withdayofmonth:+ withdayofmonth); system.out.println(withhour:+ withhour); system.out.println(withminute:+ withminute); system.out.println(withsecond:+ withsecond); system.out.println(withdayofyear:+ withdayofyear);}输出结果:
自定义输出的格式@testpublic void test() { // 自定义格式化: datetimeformatter dtf = datetimeformatter.ofpattern(yyyy/mm/dd hh:mm:ss); datetimeformatter dtf1 = datetimeformatter.ofpattern(yyyy.mm.dd hh:mm:ss); system.out.println(自定义格式yyyy/mm/dd hh:mm:ss :+dtf.format(localdatetime.now())); system.out.println(自定义格式yyyy.mm.dd hh:mm:ss :+dtf1.format(localdatetime.now())); // 用自定义格式解析: localdatetime dt2 = localdatetime.parse(2020/10/20 15:16:17, dtf); system.out.println(格式解析:+dt2);}输出结果:
localdatetime的with()方法@testpublic void test() { // 本月第一天0:00时刻: localdatetime firstday = localdate.now().withdayofmonth(1).atstartofday(); // 本月最后1天: localdate lastday = localdate.now().with(temporaladjusters.lastdayofmonth()); // 下月第1天: localdate nextmonthfirstday = localdate.now().with(temporaladjusters.firstdayofnextmonth()); // 本月第1个周一: localdate firstweekday = localdate.now().with(temporaladjusters.firstinmonth(dayofweek.monday));}两个日期前后的比较与判断@testpublic void test() { //判断两个时间点的前后 localdatetime now = localdatetime.now(); localdatetime target = localdatetime.of(2022, 2, 22, 22, 22, 22); boolean isbefore = now.isbefore(target); system.out.println(now:+now); system.out.println(target:+target); system.out.println(isbefore:+isbefore); system.out.println(localdate.now().isbefore(localdate.of(2022, 2, 22))); system.out.println(localtime.now().isafter(localtime.parse(08:15:00)));}输出结果:
结束语localdatetime获取时间以及计算都非常方便,而且是线程安全的,建议使用localdatetime。
解决可穿戴设备续航问题,妙招知多少
2020年Intel、AMD股价走势相差甚远
长江存储 64 层 3D NAND 打入华为 Mate 40 供应链
什么是放大器建立时间参数仿真
R和Python,哪个对数据科学初学者更友好?
常见的几种日期对象用法
性能全面超越卤素、氙气灯,汽车大灯LED革命来临!
这三个核心模块,所有的智能门禁系统都得有
碧斯特远程定时开关按键怎么使用
随身携带 aigo移动固态硬盘S7 Pro高速传输不掉速
中国可穿戴设备市场二季度出现回暖,同比增长17.3%
【RA2L1开发实践】- 温湿度检测平台
新型机器人学会写字 还会画简版《蒙娜丽莎》
UTC推出5.5寸光学感应器,兼容军用民用无人机
工业平板定制_基于MT6762核心板的三防工业平板电脑方案
ios10.3最新消息:苹果ios10.3支持ios10.4操作系统,ios10.3自曝神秘新功能,还不赶快升级?
关于封装技术的发展和应用分析
索尼官宣Xperia新机将于2月24日发布 并将以线上发布会形式发布
智能锁有哪些优势?先来看看豪力士智能锁的六大优势
新氦类脑智能与曦智科技共同打造以片上光网络(oNOC)技术