java8时间_JAVA8时间操作总结

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

关键APIZonedDateTime:最完整的日期和时间,包含有相对UTC和时区已经格林威治时差。

LocalDateTime:不包含时差和时区信息。

LocalTime:包含时间,但是没有日期。

LocalDate:当地日期,不包含具体时间。

Instant:瞬时实例。

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

使用LocalDate获取当前时间已经年、月、日信息LocalDate表示当前本地的时间,但是只包含日期,没有时间/**

* 获取当前时间已经年月日信息

*/

public static void getNowDate(){

//只获取日期

LocalDate now = LocalDate.now();

System.out.println("本地时间只有年月日:"+now);

Date date = new Date();

System.out.println("Java.Util.Date获取时间:"+date);

int year = now.getYear();

int monthValue = now.getMonthValue();

int dayOfMonth = now.getDayOfMonth();

System.out.printf("年 : %d  月 : %d  日 : %d t %n",year,monthValue,dayOfMonth);

}

结果本地时间只有年月日:2021-01-26

Java.Util.Date获取时间:Tue Jan 26 21:33:07 CST 2021

年 : 2021  月 : 1  日 : 26 t

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

* 处理特点的时间根据年月日

* @param year

* @param month

* @param day

*/

public static void setSpecilDate(int year,int month,int day) {

LocalDate date = LocalDate.of(year, month, day);

System.out.println("设置时间为 :"+date);

}

结果设置时间为 :2021-1-26

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

* 判断两个日期是否equals

*/

public static void compareLocalDate(){

LocalDate now = LocalDate.now();

LocalDate date = LocalDate.of(2020, 12, 26);

boolean equals = now.equals(date);

String result =equals?"相等":"不相等";

System.out.printf("时间now %s 和 时间date %s  %s \n", now, date,result);

}

结果时间now 2021-1-26 和 时间date 2021-1-26  相等

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

* 处理一年只发生一次的事情

*/

public static void cycleDate(){

//获取当前时间

LocalDate now = LocalDate.now();

//设置特点时间

LocalDate date = LocalDate.of(2020, 1, 26);

//获取月份和日期

MonthDay monthDay = MonthDay.of(date.getMonth(), date.getDayOfMonth());

//获取当前时间的月份和日期

MonthDay currentDay = MonthDay.from(now);

String equals = currentDay.equals(monthDay)?"是":"不是";

System.out.printf("时间now %s 和 时间date %s  %s 周期循环日 \n", now, date,equals);

}

结果时间now 2021-01-26 和 时间date 2020-01-26  是 周期循环日

使用LocalTime获取当前时间(只有时间没有年月日),已经对时间进行加减操作LocalTime可是使用静态工厂方法LocalTime.now()获取当前时间。默认格式是hh:mm:ss:nm。/**

* 对时间进行加减操作

*/

public static void operatDate(){

LocalTime localTime = LocalTime.now();

LocalTime time = 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时间进行加减操作

*/

public static void operatLocalDateDate(){

LocalDate today = LocalDate.now();

LocalDate previousYear = today.plusYears(-1).plusMonths(1).plusDays(1).plusWeeks(-1);

LocalDate previousYear1 = today.minusYears(1).plusMonths(1).plusDays(1).minusWeeks(1);

String result =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比较日期比较/**

* 判断两个日期的早晚

*/

public  static  void isBeforeOrAfter(){

LocalDate now = LocalDate.now();

LocalDate plusDays = now.plusDays(1);

String beforeSrt = now.isBefore(plusDays)?"是":"不是";

String afterSrt = 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计算两个日期之间的天数和月数/**

* 计算日期相差天数和月数

*/

public  static void clacDateDays(){

LocalDate now = LocalDate.now();

LocalDate plusMonths = now.plusMonths(2).plusDays(-1);

Period between = 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天

获取时间戳/**

* 获取时间戳

*/

public  static void getTimestamp(){

Instant now = Instant.now();

System.out.println(now);

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值