快捷搜索:  汽车  科技

浅谈java8的使用大道至简(JAVA8时间操作总结)

浅谈java8的使用大道至简(JAVA8时间操作总结)时间now2021-1-26和时间date2021-1-26相等 使用MonthDay检查年周期性时间 在实际项目中,我们经常会遇到一些周期性的事件,例如生日、结婚纪念日或者每月定时给客户发送邮件等事件,在Java8中使用MonthDay类,实现了月份和日的组合,这样就可以判断每年都会发生的事件了/** *判断两个日期是否equals */ publicstaticvoidcompareLocalDate(){ LocalDatenow=LocalDate.now(); LocalDatedate=LocalDate.of(2020 12 26); booleanequals=now.equals(date); Stringresult=equals?"相等":"不相等"; System.out.printf("时间now%s和时间date%s%s\

Java8处理日期总结

Java8对lambda、streams做了优化,也推出了全新的处理时间API,明确了时间概念,如:instant(瞬时),duration(长短)、日期、时间、时区和周期 和老版本不同的是,新的API是以IOS为标准日历系统的,java.time下的所有类都是线程安全的。

关键API
  • ZonedDateTime:最完整的日期和时间,包含有相对UTC和时区已经格林威治时差。
  • LocalDateTime:不包含时差和时区信息。
  • LocalTime:包含时间,但是没有日期。
  • LocalDate:当地日期,不包含具体时间。
  • Instant:瞬时实例。
  • 代码实现

    主要通过一些简单的代码实例去学习Java8中的时间API,只有项目才是学习新知识最有效的方式。

    使用LocalDate获取当前时间已经年、月、日信息

    LocalDate表示当前本地的时间,但是只包含日期,没有时间

    /** *获取当前时间已经年月日信息 */ publicstaticvoidgetNowDate(){ //只获取日期 LocalDatenow=LocalDate.now(); System.out.println("本地时间只有年月日:" now); Datedate=newDate(); System.out.println("Java.Util.Date获取时间:" date); intyear=now.getYear(); intmonthValue=now.getMonthValue(); intdayOfMonth=now.getDayOfMonth(); System.out.printf("年:%d月:%d日:%dt%n" year monthValue dayOfMonth); }

    结果

    本地时间只有年月日:2021-01-26 Java.Util.Date获取时间:TueJan2621:33:07CST2021 年:2021月:1日:26t 使用LocalDate获取特定时间

    LocalDate.of()可以创建任意时间,只有输入年月日参数即可,不像之前的Java API起始时间是1900,月份从0开始。

    /** *处理特点的时间根据年月日 *@paramyear *@parammonth *@paramday */ publicstaticvoidsetSpecilDate(intyear intmonth intday){ LocalDatedate=LocalDate.of(year month day); System.out.println("设置时间为:" date); }

    结果

    设置时间为:2021-1-26 使用equals判断两个日期是否相等

    在现实项目中进程会遇到判断两个日期是否相等,LocalDate重载了 equal方法使得她们可以进行比较

    /** *判断两个日期是否equals */ publicstaticvoidcompareLocalDate(){ LocalDatenow=LocalDate.now(); LocalDatedate=LocalDate.of(2020 12 26); booleanequals=now.equals(date); Stringresult=equals?"相等":"不相等"; System.out.printf("时间now%s和时间date%s%s\n" now date result); }

    结果

    时间now2021-1-26和时间date2021-1-26相等 使用MonthDay检查年周期性时间

    在实际项目中,我们经常会遇到一些周期性的事件,例如生日、结婚纪念日或者每月定时给客户发送邮件等事件,在Java8中使用MonthDay类,实现了月份和日的组合,这样就可以判断每年都会发生的事件了

    /** *处理一年只发生一次的事情 */ publicstaticvoidcycleDate(){ //获取当前时间 LocalDatenow=LocalDate.now(); //设置特点时间 LocalDatedate=LocalDate.of(2020 1 26); //获取月份和日期 MonthDaymonthDay=MonthDay.of(date.getMonth() date.getDayOfMonth()); //获取当前时间的月份和日期 MonthDaycurrentDay=MonthDay.from(now); Stringequals=currentDay.equals(monthDay)?"是":"不是"; System.out.printf("时间now%s和时间date%s%s周期循环日\n" now date equals); }

    结果

    时间now2021-01-26和时间date2020-01-26是周期循环日 使用LocalTime获取当前时间(只有时间没有年月日),已经对时间进行加减操作

    LocalTime可是使用静态工厂方法LocalTime.now()获取当前时间。默认格式是hh:mm:ss:nm。

    /** *对时间进行加减操作 */ publicstaticvoidoperatDate(){ LocalTimelocalTime=LocalTime.now(); LocalTimetime=localTime.plusHours(-1).plusMinutes(1).plusSeconds(30); System.out.printf("当前时间是%s和加减操作后的时间%s\n" localTime time); }

    结果

    当前时间是22:03:52.522和加减操作后的时间21:05:22.522 计算N周、N月或者N年前、后的日期

    /** *对LocalDate时间进行加减操作 */ publicstaticvoidoperatLocalDateDate(){ LocalDatetoday=LocalDate.now(); LocalDatepreviousYear=today.plusYears(-1).plusMonths(1).plusDays(1).plusWeeks(-1); LocalDatepreviousYear1=today.minusYears(1).plusMonths(1).plusDays(1).minusWeeks(1); Stringresult=previousYear.equals(previousYear1)?"相等":"不相等"; System.out.printf("previousYear时间%s和previousYear1时间%s%s\n" previousYear previousYear1 result); }

    结果:可见不同的操作有相同的结果,对时间进行操作要多思考

    previousYear时间2020-02-20和previousYear1时间2020-02-20相等 判断连个日期的早晚

    在LocalDate中包含isBefore()和isAfter比较日期比较

    /** *判断两个日期的早晚 */ publicstaticvoidisBeforeOrAfter(){ LocalDatenow=LocalDate.now(); LocalDateplusDays=now.plusDays(1); StringbeforeSrt=now.isBefore(plusDays)?"是":"不是"; StringafterSrt=plusDays.isAfter(now)?"是":"不是"; System.out.printf("时间%s%s在时间%s之前\n" now beforeSrt plusDays); System.out.printf("时间%s%s在时间%s之后\n" plusDays afterSrt now); }

    结果

    时间2021-01-26是在时间2021-01-27之前 时间2021-01-27是在时间2021-01-26之后 使用Period计算两个日期之间的天数和月数

    /** *计算日期相差天数和月数 */ publicstaticvoidclacDateDays(){ LocalDatenow=LocalDate.now(); LocalDateplusMonths=now.plusMonths(2).plusDays(-1); Periodbetween=Period.between(now plusMonths); System.out.printf("时间%s和时间%s相差%s月%s天\n" now plusMonths between.getMonths() between.getDays()); }

    结果

    时间2021-01-26和时间2021-03-25相差1月27天 获取时间戳

    /** *获取时间戳 */ publicstaticvoidgetTimestamp(){ Instantnow=Instant.now(); System.out.println(now); } 总结:

    今天介绍Java8中日期和是时间API,主要介绍了LocalDate和LocalTime类,这些API都是线程安全的,而Date和Calendr类都是 是非线程安全的 介绍的可能不是很全还请一起探讨!

    喜欢我的可以进行关注,谢谢

    浅谈java8的使用大道至简(JAVA8时间操作总结)(1)

    猜您喜欢: