一文带你搞懂Java8的LocalDateTime
目录
- 前言
- LocalDateTime
- 获取当前时间
- 获取当前时间的年月日时分秒
- 给LocalDateTime赋值
- 时间与字符串相互转换
- 时间运算:加上对应时间
- 时间运算:减去对应时间
- 两个时间比较
- 利用Duration计算时间差
- 改变当前时间的年月日时分秒
- 自定义输出的格式
- LocalDateTime的with()方法
- 两个日期前后的比较与判断
- 结束语
前言
LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的,较之前的 util.Date 以及 Calander 使用起来更加的方便直观,下面介绍几种常见的日期对象用法。
- LocalDateTime:日期加时间的日期对象,包含年月日时分秒
- LocalDate:日期类,包含年月日
- LocalTime:时间类,包含时分秒
LocalDateTime
获取当前时间
@Test publicvoidtest(){ LocalDatelocalD开发者_开发学习ate=LocalDate.now(); LocalTimelocalTime=LocalTime.now(); LocalDateTimelocalDateTime=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 publicvoidtest(){ LocalDateTimelocalDateTime=LocalDateTime.now();//获取当前时间 intyear=localDateTime.getYear();//获取年份2023 intmonth=localDateTime.getMonthValue();//获取月份2 intday=localDateTime.getDayOfMonth();//获取月中的天数22 inthour=localDateTime.getHour();//获取当前的小时17 intminute=localDateTime.getMinute();//获取当前分钟33 intsecond=lwww.devze.comocalDateTime.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页面,代码如下:
publicvoidtest(){ LocalDateTimeof=LocalDateTime.of(2023,2,22,22,22,22); System.out.println(of);//输出2023-02-22T22:22:22 }
时间与字符串相互转换
@Test publicvoidtest(){ //将字符串转换为指定格式的时间(格式要和给定的格式一致,不然会报错) LocalDateTimeparse=LocalDateTime.parse("2023-02-2222:22:22",DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss")); LocalDateTimeparse1=LocalDatephpTime.parse("2023022222:22:22",DateTimeFormatter.ofPattern("yyyyMMddHH:mm:ss")); LocalDateTimeparse2=LocalDateTime.parse("2023.02.2222:22:22",DateTimeFormatter.ofPattern("yyyy.MM.ddHH: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 //时间转字符串 LocalDateTimenow=LocalDateTime.now(); DateTimeFormatterof=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss"); StringdateTime=now.format(of); System.out.println(dateTime);//输出2023-02-2217:56:18 }
输出结果:
时间运算:加上对应时间
LocalDateTime提供了对日期和时间进行加减的非常简单的链式调用,让时间运算变得非常简单:
@Test publicvoidtest(){ LocalDateTimenow=LocalDateTime.now();//当前时间2023-02-22T18:00:19.352 LocalDateTimeplusYears=now.plusYears(2);//在当前时间加上2年2025-02-22T18:00:19.352 LocalDateTimeplusMonths=now.plusMonths(2);//在当前时间商加上2月2023-04-22T18:00:19.352 LocalDateTimeplusDays=now.plusDays(2);//在当前时间加上2天2023-02-24T18:00:19.352 LocalDateTimeplusHours=now.plusHours(2);//在当前时间加上2个小时2023-02-22T20:00:19.352 LocalDateTimeplusMinutes=now.plusMinutes(30);//在当前时间加上30分钟2023-02-22T18:30:19.352 LocalDateTimeplusSeconds=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 publicvoidtest(){ LocalDateTimenow=LocalDateTime.now();//当前时间 LocalDateTimeminusYears=now.minusYewww.devze.comars(2);//在当前时间减上2年 LocalDateTimeminusMonths=now.minusMonths(2);//在当前时间商减上2月 LocalDateTimeminusDays=now.minusDays(2);//在当前时间减上2天 LocalDateTimeminusHours=now.minusHours(2);//在当前时间减上2个小时 LocalDateTimeminusMinutes=now.minusMinutes(30);//在当前时间减上30分钟 LocalDateTimeminusSeconds=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 publicvoidtest(){ LocalDateTimenow=LocalDateTime.now();//当前时间 LocalDateTimenow1=now.plusYears(5);//在当前时间加上5年 //给LocalDateTime赋值 LocalDateTimeof=LocalDateTime.of(2023,2,2,22,22,22); LocalDateTimeof1=LocalDateTime.of(2023,8,5,1,1,javascript1); //两个时间作比较,第一个时间减去第二个时间(如果年份相同,比较月份,月份相同比较天数,以此类推) intcompareTo=now1.compareTo(now); intcompareTo1=now.compareTo(now1); intcompareTo2=now.compareTo(of); intcompareTo3=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 publicvoidtest(){ LocalDateTimenow=LocalDateTime.now();//当前时间 //给LocalDateTime赋值 LocalDateTimeof=LocalDateTime.of(2022,2,22,2,2,2); Durationduration=Duration.between(of,now);//后面减去前面 longtoDays=Duration.between(of,now).toDays();//相差的天数 longtoHours=Duration.between(of,now).toHours();//相差的小时数 longtoMinutes=Duration.between(of,now).toMinutes();//相差的分钟数 longtoMillis=Duration.between(of,now).toMillis();//相差毫秒数 longtoNanos=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 publicvoidtest(){ LocalDateTimenow=LocalDateTime.now();//当前时间 LocalDateTimewithYear=now.withYear(2060);//改变当前年份(变成2060年) LocalDateTimewithMonth=now.withMonth(12);//改变当前月份(变成12月份) LocalDateTimewithDayOfMonth=now.withDayOfMonth(28);//改变当前天数(变成28日) LocalDateTimewithHour=now.withHour(23);//改变当前小时数(变成23时) LocalDateTimewithMinute=now.withMinute(30);//改变当前分钟(变成30分钟) LocalDateTimewithSecond=now.withSecond(23);//改变当前小时数(变成23时) LocalDateTimewithDayOfYear=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 publicvoidtest(){ //自定义格式化: DateTimeFormatterdtf=DateTimeFormatter.ofPattern("yyyy/MM/ddHH:mm:ss"); DateTimeFormatterdtf1=DateTimeFormatter.ofPattern("yyyy.MM.ddHH: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())); //用自定义格式解析: LocalDateTimedt2=LocalDateTime.parse("2020/10/2015:16:17",dtf); System.out.println("格式解析:"+dt2); }
输出结果:
LocalDateTime的with()方法
@Test publicvoidtest(){ //本月第一天0:00时刻: LocalDateTimefirstDay=LocalDate.now().withDayOfMonth(1).atStartOfDay(); //本月最后1天: LocalDatelastDay=LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); //下月第1天: LocalDatenextMonthFirstDay=LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth()); //本月第1编程个周一: LocalDatefirstWeekday=LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); }
两个日期前后的比较与判断
@Test publicvoidtest(){ //判断两个时间点的前后 LocalDateTimenow=LocalDateTime.now(); LocalDateTimetarget=LocalDateTime.of(2022,2,22,22,22,22); booleanisBefore=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。
到此这篇关于一文带你搞懂Java8的LocalDateTime的文章就介绍到这了,更多相关Java8 LocalDateTime内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论