2-3 2-4 JDK8时间日期处理类处理
一、背景解析
- 在JDK8之前处理时间使用 SimpleDataFormat、Calender 、Data等类 ,来做时间上的处理。
- 线程安全: Date不是线程安全的,你需要编写额外的代码处理线程安全问题
- API设计和易用性: 由于Date和Calendar的设计不当你无法完成日常的日期操作
- 线程安全: Date不是线程安全的,你需要编写额外的代码处理线程安全问题
在JDK8中将会采用java.time包下的所有类来代替传统方式。以下是常用类示意图
二、各类分别讲解
其中用来获取时间的LocalTime、LocalDate、LocalDateTime三个类有以下几个共同点:(1)都不可被实例化。实例化采用 类名 变量名 = 类名.now()
方式来进行实例化。(2)获取时间详细信息都采用 getXxxx(); 方法来获取单个信息。(3)修改时间大小都采用 plusXxxx(要增加/删除的大小); 方法
1)、LocalTime(时间)#时:分:秒
该类获取的时间没有日期,它是当地时间的描述。
public class Main {
public static void main(String[] args) throws IOException {
LocalTime now = LocalTime.now();// 获取本地时间
System.out.println(now);// 日期打印
System.out.println(now.getHour());// 获取小时
System.out.println(now.getMinute());// 获取分钟
System.out.println(now.getSecond());// 获取秒
System.out.println(now.plusHours(2));// 获取几个小时后的时间 plus可以传负数
System.out.println(now.plusMinutes(30));// 获取多少分钟后的时间
System.out.println(now.plusSeconds(30));// 获取多少秒后的时间
}
}
2)、LocalDate(日期)#年-月-日
这个类用来描述日期并无时间描述。
public class Main {
public static void main(String[] args) throws IOException {
LocalDate now = LocalDate.now();// 获取本地日期
System.out.println(now);// 日期打印
System.out.println(now.getYear());// 获取年份
System.out.println(now.getMonth());// 获取月份
System.out.println(now.getMonthValue());// 获取数字格式月份
System.out.println(now.getDayOfWeek());// 获取星期几
System.out.println(now.getDayOfMonth());// 获取多少号
System.out.println(now.plusDays(2)); // 获取多少天后的日期 plus可以传负数
System.out.println(now.plusMonths(3));// 获取几个月后的日期
System.out.println(now.plusWeeks(1));// 获取几个星期后的日期
System.out.println(now.plusYears(1));// 获取几年后的日期
}
}
3)、LocalDateTime(日期时间)#年-月-日 时:分:秒
这个类既描述日期也描述时间。
public class Main {
public static void main(String[] args) throws IOException {
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDate = LocalDateTime.of(2020, 11, 11, 11, 11);// 2020-11-11 11:11
System.out.println(now);// 日期打印
System.out.println(newDate);// 自定义日期打印
System.out.println(now.isAfter(newDate));// 判断 now 在 newDate 之后
System.out.println(now.isBefore(newDate));// 判断 now 在 newDate 之前
}
}
4)、DateTimeFormatter(时间日期格式处理)
public class Main {
public static void main(String[] args) throws IOException {
LocalDateTime now = LocalDateTime.now();
// 日期格式转换类
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String format = dateTimeFormatter.format(now);// 格式转换
System.out.println(now);// 日期打印
System.out.println(format); // 转换后的日期
}
}
5)、Duration(时间差值计算)
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime date = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
Duration duration = Duration.between(now, date);
System.out.println(now);
System.out.println(date);
System.out.println("相差"+duration.toDays()+"天");
System.out.println("相差"+duration.toHours()+"小时");
System.out.println("相差"+duration.toMinutes()+"分钟");
}
}
6)、Period(日期差值计算)
public class Main {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
LocalDate date = LocalDate.of(2020, 11, 11);
Period period = Period.between(now, date);
System.out.println(now);
System.out.println(date);
System.out.println("相差"+period.getYears()+"年"+period.getMonths()+"个月"+period.getDays()+"日");
}
}
未经授权不得转载或转载请注明出处