浅谈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主要通过一些简单的代码实例去学习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类都是 是非线程安全的 介绍的可能不是很全还请一起探讨!
喜欢我的可以进行关注,谢谢