LocalDateTime 的常用方法,一文轻松解决掉你的烦恼!

2024-03-20 6356阅读

前言

LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的,较之前的 util.Date 以及 Calander 使用起来更加的方便直观,下面介绍几种常见的日期对象用法。

LocalDateTime 的常用方法,一文轻松解决掉你的烦恼! 第1张
()
  • LocalDateTime:日期加时间的日期对象,包含年月日时分秒

  • LocalDate:日期类,包含年月日

    LocalDateTime 的常用方法,一文轻松解决掉你的烦恼! 第2张
    ()
  • LocalTime:时间类,包含时分秒

    1.获取当前时间 

    Python
    @Test
    public 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

      2.获取当前时间的年月日时分秒 

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

       3.给LocalDateTime赋值

      • public void test() {
      • LocalDateTime of = LocalDateTime.of(2023,2,22,22,22,22);
      • System.out.println(of); // 输出2023-02-22T22:22:22
      • }

      4.时间与字符串相互转换

      • @Test
      • public 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
      • }

      5.时间运算:加上对应时间 

      LocalDateTime提供了对日期和时间进行加减的非常简单的链式调用,让时间运算变得非常简单:

      • @Test
      • public 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
      • }

      6.时间运算:减去对应时间 

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

      7.两个时间比较

      • @Test
      • public 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
      • }

      8.利用Duration计算时间差

      注意没有计算相差的年和秒值,对于要计算相差的秒数,可以利用计算毫秒来进行转换

      • @Test
      • public 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
      • }

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

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

      10.自定义输出的格式

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

      11.LocalDateTime的with()方法

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

       12.两个日期前后的比较与判断

      • @Test
      • public 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))); // false
      • System.out.println(LocalTime.now().isAfter(LocalTime.parse("08:15:00"))); // false
      • }

       LocalDateTime获取时间以及计算都非常方便,而且是线程安全的,建议使用LocalDateTime。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]