0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的几种日期对象用法

科技绿洲 来源:了不起 作者:了不起 2023-09-25 11:10 次阅读

前言

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

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

LocalDateTime

获取当前时间

@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

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

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

输出结果:

图片

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

时间与字符串相互转换

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

输出结果:

图片

时间运算:加上对应时间

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

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

输出结果:

图片

时间运算:减去对应时间

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

输出结果:

图片

两个时间比较

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

输出结果:

图片

利用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
}

输出结果:

图片

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

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

输出结果:

图片

自定义输出的格式

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

输出结果:

图片

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

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

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

输出结果:

图片

结束语

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68324
  • 对象
    +关注

    关注

    1

    文章

    38

    浏览量

    17376
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19646
收藏 人收藏

    评论

    相关推荐

    掌握find命令的这几种用法,就没有找不到的文件!

    今天浩道跟大家分享linux下关于find命令的几种经典用法,让你在linux茫茫的文件海洋中可以找出任何想要的文件!
    发表于 12-06 14:19 798次阅读

    TL431的几种基本用法分享

    TL431作为一个高性价比的常用分流式电压基准,有很广泛的用途。这里简单介绍一下TL431常见的和不常见几种接法。
    发表于 05-06 09:42

    常见的整流电路有哪几种?如何去区分这几种常见的整流电路?

    常见的整流电路有哪几种?其特性是什么?如何去区分这几种常见的整流电路?对整流电路中二极管的要求有哪些?
    发表于 07-11 07:19

    while的使用形式有哪几种?分别有什么用法

    请问下while的使用形式有哪几种?分别有什么用法
    发表于 07-15 12:29

    状态位在软件设计中的常见用法是什么?

    外设常具备的几类寄存器?控制外设的常见操作?状态位在软件设计中的常见用法是什么?外设函数有哪些类型?
    发表于 11-18 07:32

    常见的fork用法是什么

    的进程一模一样,这两 个进程都会继续运行最常见的fork用法是创建一个新的进程,然后使用exec载入二进制映像,替换当前进程的映像。这种情况下,派生(for
    发表于 12-15 07:38

    整理一下ElementUI+VUE日期控件禁用用法

    今天给大家整理一下ElementUI+VUE 日期控件禁用用法,希望对大家有所帮助!HTML文件
    发表于 01-18 09:35

    几种常见振荡器的高频电路

    几种常见振荡器的高频电路 图 4-7是一些常见振荡器的高频电路
    发表于 06-29 13:50 8345次阅读
    <b class='flag-5'>几种</b><b class='flag-5'>常见</b>振荡器的高频电路

    几种常见的安规认证简介

    几种常见的安规认证简介
    发表于 11-29 17:57 0次下载

    通信教程02 几种常见串行通信及基础原理

    通信教程02_几种常见串行通信及基础原理
    的头像 发表于 02-26 16:12 9767次阅读

    常见几种国家供电系统设计

    几种常见的供电系统设计构思
    发表于 08-23 10:01 6次下载

    几种常见的LED电路分享

    在一些IO引脚较少或为了减少对IO的使用,需要用尽可能的减少引脚使用,本文介绍几种常见的LED的电路,减少IO使用。
    的头像 发表于 08-16 08:56 4620次阅读
    <b class='flag-5'>几种</b><b class='flag-5'>常见</b>的LED电路分享

    OpenHarmony常见几种权限

    今天给大家说一下OpenHarmony常见几种权限
    的头像 发表于 08-29 17:27 2285次阅读

    java 8的日期用法

    = LocalDate.now(); System.out.println(now);} 设置日期 of 方法是一个静态方法,接收年、月、日三个 int 参数,返回 LocalDate 对象。需要注意的是月份不是
    的头像 发表于 10-09 15:50 411次阅读

    sql中日期函数的用法

    日期函数在SQL中是非常重要的功能之一,它们能帮助我们在数据库中存储和处理日期和时间数据。在本文中,我将详细介绍一些常用的SQL日期函数,包括如何创建日期和时间数据、如何格式化和转换
    的头像 发表于 11-17 16:24 975次阅读