在JDK1.7中,处理日期相关的数据我们使用java.util.Data,在JDK1.8及以后的API中,对于时间的使用我们更加便利。新增了LocalDate、LocalTime、LocalDateTime,在java.time包下。分别表示ISO-8601日历系统的日期,时间。他们提供简单的日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。类的实例是不可变的对象,不但线程安全,而且不能修改
1.新的LocalDate用法
LocaDate today = LocalDate.now(); //获取当前的日期不包含时间 2018-10-08
LocalDate类提供了获取年、月、日的快捷方法,其实例还包含很多其它的日期属性。通过调用这些方法就可以很方便的得到需要的日期信息
LocalDate today = LocalDate.now();
int year = today.getYear(); //获取当前年份
int month = today.getMonthValue(); // 获取当前月份
int day = today.getDayOfMonth(); // 获取当天是这个月的第几天
int day = toay.getDayOfYear();// 获取当天是一年中的第几天
2.在Java 8中处理特定日期
调用另一个有用的工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等。日期所见即所得,就像下面这个例子表示了1月14日,没有任何隐藏机关。
LocalDate today = LocalDate.of(2018,10,8); 输出 2018-10-08
3.在Java 8中判断两个日期是否相等
现实生活中有一类时间处理就是判断两个日期是否相等。你常常会检查今天是不是个特殊的日子,比如生日、纪念日。这时就需要把指定的日期与某个特定 日期做比较,例如判断这一天是否是假期。下面这个例子会帮助你用Java 8的方式去解决,你肯定已经想到了,LocalDate重载了equal方法,
LocalDate today = LocalDate.of(2018,10,8); if(today.equals(date)){ System.out.println("相同的日期"); }
4.在Java 8中检查像生日这种周期性事件
Java 中另一个日期时间的处理就是检查类似每月账单、结婚纪念日、EMI日或保险缴费日这些周期性事件。如果你在电子商务网站工作,那么一定会有一个模块用来在 圣诞节、感恩节这种节日时向客户发送问候邮件。Java中如何检查这些节日或其它周期性事件呢?就是MonthDay类。这个类组合了月份和日,去掉 了年,这意味着你可以用它判断每年都会发生事件。和这个类相似的还有一个YearMonth类。这些类也都是不可变并且线程安全的值类型。通过 MonthDay来检查周期性事件:
LocalDate birDate = LocalDate.of(2018, 10, 8); MonthDay monthDay = MonthDay.of(birDate.getMonth(), birDate.getDayOfMonth()); MonthDay currDay = MonthDay.from(date); if(currDay.equals(monthDay)){ System.out.println("hello"); }else{ System.out.println("sorry"); }
5、在Java 8中获取当前时间
LocalTime time = LocalTime.now();// 打印time ,可以看到当前时间就只包含时间信息,没有日期。
6.在当前时间增加小时
LocalTime time = LocalTime.now(); LocalTime newTime = time.plusHours(2);
7.计算一周后的日期 ChronoUnit是提供的一个工具类
LocalDate date = LocalDate.now(); LocalDate nextWeek = date.plus(2,ChronoUnit.WEEKS); System.out.println(nextWeek);
8.如何用Java判断日期是早于还是晚于另一个日期
LocalDate birDate = LocalDate.of(2018, 10, 8); if(birDate.isAfter(date)){ System.out.println("yes"); }
LocalDate birDate = LocalDate.of(2018, 10, 8); if(birDate.isBefore(date)){ System.out.println("yes"); }
9.如何在Java 8中检查闰年
LocalDate date = LocalDate.now(); if(date.isLeapYear()){ System.out.println("yes"); }