当前位置:首页 > 科技  > 软件

探索LocalDateTime的魔法:高效日期时间处理的秘诀与技巧

来源: 责编: 时间:2024-06-25 09:11:13 213观看
导读哈喽,大家好,我是了不起。LocalDateTime、LocalDate、LocalTime 是Java8全新的日期框架,较之前的util.Date以及Calander使用起来更加的方便直观,下面介绍几种常见的日期对象用法。前言LocalDateTime:日期加时间的日期对象,

哈喽,大家好,我是了不起。IwS28资讯网——每日最新资讯28at.com

LocalDateTime、LocalDate、LocalTime 是Java8全新的日期框架,较之前的util.Date以及Calander使用起来更加的方便直观,下面介绍几种常见的日期对象用法。IwS28资讯网——每日最新资讯28at.com

前言

  • LocalDateTime:日期加时间的日期对象,包含年月日时分秒
  • LocalDate:日期类,包含年月日
  • LocalTime:时间类,包含时分秒

LocalDateTime

JDK1.8版本中新引入的API,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的。IwS28资讯网——每日最新资讯28at.com

获取当前时间

@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}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

可以看到不用做格式转换就可以得到可读性很高的日期格式。注意:ISO 8601规定的日期和时间分隔符是T。标准格式如下:IwS28资讯网——每日最新资讯28at.com

  • 日期: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);}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

给LocalDateTime赋值

在static目录中新建kaptcha.html页面,代码如下:IwS28资讯网——每日最新资讯28at.com

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}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

时间运算:加上对应时间

LocalDateTime提供了对日期和时间进行加减的非常简单的链式调用,让时间运算变得非常简单:IwS28资讯网——每日最新资讯28at.com

@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 plusMnotallow= 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);}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

时间运算:减去对应时间

@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);}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

两个时间比较

@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}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

利用Duration计算时间差

注意没有计算相差的年和秒值,对于要计算相差的秒数,可以利用计算毫秒来进行转换IwS28资讯网——每日最新资讯28at.com

@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}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

改变当前时间的年月日时分秒

@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);}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

自定义输出的格式

@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);}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

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")));}

输出结果:IwS28资讯网——每日最新资讯28at.com

图片图片IwS28资讯网——每日最新资讯28at.com

结束语

LocalDateTime获取时间以及计算都非常方便,而且是线程安全的,建议使用LocalDateTime。IwS28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-96271-0.html探索LocalDateTime的魔法:高效日期时间处理的秘诀与技巧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#中的事件与委托:深入理解事件驱动编程模型

下一篇: 用机器人开车,日本自动驾驶有点抽象

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
Top