java 8 新特性之日期-时间 API

Date-Time API简介 在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期类都是可变的;日期/时间类的定义并不一致,在java.util和java.sql的包下都含有Date类,在开发过程中极易出错; 日期类并不提供国际化,没有时区支持。为了解决以上问题,Java8在java.time 包下提供了很多新的 API,常用的类包括LocalDate、LocalTime、LocalDateTime,用以处理日期,时间,日期/时间等 LocalDate类 LocalDate是一个不可变类,在不考虑时区的情况下可以对日期(不包括时间)进行各种操作,它的默认格式是yyyy-MM-dd 获取当前日期以及年、月、日 代码示例: //获取当前日期以及年、月、日 LocalDate localDate = LocalDate.now(); int year = localDate.getYear(); int month = localDate.getMonthValue(); int day = localDate.getDayOfMonth(); System.out.println("当前日期:" + localDate); System.out.println("年:" + year + " 月:" + month + " 日:" + day); 运行结果: 当前日期:2018-12-12 年:2018 月:12 日:12 获取指定的日期 代码示例: //获取指定的日期 LocalDate specifiedDay = LocalDate.of(2008, 8, 18); System.out.println("指定日期:" + specifiedDay); 运行结果: 指定日期:2008-08-18 使用DateTimeFormatter进行日期格式化 代码示例: //使用DateTimeFormatter类进行日期格式化 LocalDate localDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); System.out.println("格式化后的日期:" + formatter.format(localDate)); //将字符串转为LocalDate类型 LocalDate newDate =LocalDate.parse("2018年12月12日", formatter); System.out.println("字符串转日期类型:" + newDate); 运行结果: 格式化后的日期:2018年12月12日 字符串转日期类型:2018-12-12 比较两个时间的先后顺序以及是否相等 代码示例: LocalDate localDate = LocalDate.now(); LocalDate otherDate = LocalDate.of(2018, 11, 11); //equals方法用于比较两个日期是否相等 if(localDate.equals(otherDate)) { System.out.println("localDate与otherDate相等!"); } else { //isAfter和isBefore方法用于比较两个日期前后顺序 if(localDate.isAfter(otherDate)) { System.out.println("localDate晚于otherDate!"); } if(localDate.isBefore(otherDate)) { System.out.println("localDate早于otherDate!"); } } 运行结果: localDate晚于otherDate! 对日期做加减运算 代码示例: LocalDate localDate = LocalDate.now(); System.out.println("2年后日期:" + localDate.plusYears(2)); System.out.println("6月后日期:" + localDate.plusMonths(6)); System.out.println("3周后日期:" + localDate.plusWeeks(3)); System.out.println("15天后日期:" + localDate.plusDays(15)); System.out.println("2年前日期:" + localDate.minusYears(2)); System.out.println("6月前日期:" + localDate.minusMonths(6)); System.out.println("3周前日期:" + localDate.minusWeeks(3)); System.out.println("15天前日期:" + localDate.minusDays(15)); 运行结果: 2年后日期:2020-12-12 6月后日期:2019-06-12 3周后日期:2019-01-02 15天后日期:2018-12-27 2年前日期:2016-12-12 6月前日期:2018-06-12 3周前日期:2018-11-21 15天前日期:2018-11-27 获取日期间隔的天数 代码示例: //获取某年份的第N天的日期 LocalDate specialDay = LocalDate.ofYearDay(2018, 100); System.out.println("2018年的第100天:" + specialDay); //获取两个日期的间隔天数 long intervalDay = localDate.toEpochDay() - specialDay.toEpochDay(); System.out.println("间隔天数: " + intervalDay); 运行结果: 2018年的第100天:2018-04-10 间隔天数:246 LocalTime类 LocalTime与LocalDate一样,也是一个不可变的类,默认格式是hh:mm:ss.zzz,它提供了对时间的各种操作 获取当前时间以及自定义时间 代码示例: //获取当前时间、时、分、秒以及自定义时间 LocalTime localTime = LocalTime.now(); int hour = localTime.getHour(); int minute = localTime.getMinute(); int second = localTime.getSecond(); System.out.println("当前时间:" + localTime); System.out.println("时:" + hour + " 分:" + minute + " 秒:" + second); //获取自定义时间 LocalTime specifiedTime = LocalTime.of(15, 30, 45); System.out.println("自定义时间:" + specifiedTime); 运行结果: 当前时间:13:45:59.039 时:13 分:45 秒:59 自定义时间:15:30:45 使用DateTimeFormatter进行时间格式化 代码示例: //使用DateTimeFormatter类进行时间格式化 LocalTime localTime = LocalTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分ss秒"); System.out.println("格式化后的时间:" + formatter.format(localTime)); //将字符串转为LocalTime类型 LocalTime newTime = LocalTime.parse("20时35分45秒", formatter); System.out.println("字符串转时间类型:" + newTime); 运行结果: 格式化后的时间:20时38分33秒 字符串转时间类型:20:35:45 比较两个时间的先后顺序 代码示例: //equals方法比较两个时间是否相等 if(localTime.equals(specifiedTime)) { System.out.println("localTime与specifiedTime相等!"); } else { //isAfter、isBefore方法比较两个时间的先后顺序 if(localTime.isAfter(specifiedTime)) { System.out.println("localTime晚于specifiedTime!"); } if(localTime.isBefore(specifiedTime)) { System.out.println("localTime早于specifiedTime!"); } } 运行结果: localTime早于specifiedTime! 对时间做加减运算 代码示例: LocalTime localTime = LocalTime.now(); System.out.println("当前时间:" + localTime); System.out.println("2小时后时间:" + localTime.plusHours(2)); System.out.println("30分钟后时间:" + localTime.plusMinutes(30)); System.out.println("500秒后日时间:" + localTime.plusSeconds(500)); System.out.println("2小时前时间:" + localTime.minusHours(2)); System.out.println("30分钟前时间:" + localTime.minusMinutes(30)); System.out.println("500秒前时间:" + localTime.minusSeconds(500)); 运行结果: 当前时间:14:10:15.666 2小时后时间:16:10:15.666 30分钟后时间:14:40:15.666 500秒后时间:14:18:35.666 2小时前时间:12:10:15.666 30分钟前时间:13:40:15.666 500秒前时间:14:01:55.666 LocalDateTime类 LocalDateTime是一个不可变的日期-时间对象,它既包含了日期同时又含有时间,默认格式是yyyy-MM-ddTHH-mm-ss.zzz 获取当前日期时间以及自定义日期时间 示例代码: //获取当前的日期时间 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("当前的日期时间:" + localDateTime); //获取自定义的的日期时间 LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now()); System.out.println("自定义的日期时间:" + specifiedDateTime); 运行结果: 当前的日期时间:2018-12-12T14:31:00.163 自定义的日期时间:2018-12-12T14:31:00.164 转化为日期和时间 代码示例: //转化为LocalDate和LocalTime LocalDate localDate = localDateTime.toLocalDate(); LocalTime localTime = localDateTime.toLocalTime(); System.out.println("当前日期:" + localDate); System.out.println("当前时间:" + localTime); 运行结果: 当前日期:2018-12-12 当前时间:14:31:00.163 好文要顶https://www.cnblogs.com/liantdev/p/10108504.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信