Java 8里面添加了许多的新特性,如LocalDate、LocalTime、LocalDateTime
新增的日期类主要有三种
java.time.LocalDate ->只对年月日做出处理
默认格式:yyyy-MM-dd, 例如:2021-11-29
java.time.LocalTime ->只对时分秒纳秒做出处理
默认格式:HH:mm:ss.SSSSSSSSS 例如:11:23:40.051942200
java.time.LocalDateTime ->同时可以处理年月日和时分秒
默认格式:yyyy-MM-ddTHH:mm:ss.SSSSSSSSS 例如:2021-12-01T11:27:22.598224900
创建LocalDateTime
@Test
public void now(){
LocalDateTime now = LocalDateTime.now(); // 获取当前时间
LocalDate now1 = LocalDate.now(); // 获取当前年月日(当前日期)
LocalTime now2 = LocalTime.now();// 获取当前时分秒(具体时间)
System.out.println(now);
System.out.println(now1);
System.out.println(now2);
}
@Test
public void now1(){
LocalDateTime now = LocalDateTime.now(); // 获取当前时间
int year = now.getYear(); // 获取年份
int month = now.getMonthValue(); // 获取月份
int day = now.getDayOfMonth(); // 获取月中的天数
int hour = now.getHour(); // 获取当前的小时
int minute = now.getMinute(); // 获取当前分钟
int second = now.getSecond(); // 获取当前秒数
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
}
当前系统时间加上对应的时间
@Test
public void now2(){
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime now1 = now.plusYears(5); // 在当前时间加上5年
LocalDateTime now2 = now.plusMonths(5);// 在当前时间商加上5月
LocalDateTime now3 = now.plusDays(7); // 在当前时间加上7天
LocalDateTime now4 = now.plusHours(2); // 在当前时间加上2个小时
LocalDateTime now5 = now.plusMinutes(30); // 在当前时间加上30分钟
LocalDateTime now6 = now.plusSeconds(30); // 在当前时间加上30秒
System.out.println(now);
System.out.println(now1);
System.out.println(now2);
System.out.println(now3);
System.out.println(now4);
System.out.println(now5);
System.out.println(now6);
}
当前系统时间减去对应的时间
@Test
public void now3(){
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime now1 = now.minusYears(5); // 在当前时间减上5年
LocalDateTime now2 = now.minusMonths(5);// 在当前时间商减上5月
LocalDateTime now3 = now.minusDays(7); // 在当前时间减上7天
LocalDateTime now4 = now.minusHours(2); // 在当前时间减上2个小时
LocalDateTime now5 = now.minusMinutes(30); // 在当前时间减上30分钟
LocalDateTime now6 = now.minusSeconds(30); // 在当前时间减上30秒
System.out.println(now);
System.out.println(now1);
System.out.println(now2);
System.out.println(now3);
System.out.println(now4);
System.out.println(now5);
System.out.println(now6);
}
改变当前时间
@Test
public void now4(){
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime now1 = now.withYear(2060); // 改变当前年份(变成2060年)
LocalDateTime now2 = now.withMonth(12); // 改变当前月份(变成12月份)
LocalDateTime now3 = now.withDayOfMonth(29); //改变当前天数(变成29日)
LocalDateTime now4 = now.withHour(23); // 改变当前小时数(变成23时)
LocalDateTime now5 = now.withMinute(30); // 改变当前分钟(变成30分钟)
LocalDateTime now6 = now.withSecond(23); // 改变当前小时数(变成23时)
LocalDateTime now7 = now.withDayOfYear(60); // 从一月一号开始加上60天
System.out.println(now);
System.out.println(now1);
System.out.println(now2);
System.out.println(now3);
System.out.println(now4);
System.out.println(now5);
System.out.println(now6);
System.out.println(now7);
}
@Test
public void compareTo(){
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime now1 = now.plusYears(5); // 在当前时间加上5年
// 给LocalDateTime 赋值
LocalDateTime of = LocalDateTime.of(2022,2,5,1,1,1);
LocalDateTime of1 = LocalDateTime.of(2022,8,5,1,1,1);
//两个时间作比较,第一个时间减去第二个时间(如果年份相同,比较月份,月份相同比较天数,以此类推)
int compareTo = now1.compareTo(now);
int compareTo1 = now.compareTo(now1);
int compareTo2 = now.compareTo(of);
int compareTo3 = now.compareTo(of1);
System.out.println(now); // 输出 2022-08-13 14:35:52
System.out.println(now1); // 输出 2027-08-13 14:35:52
System.out.println(of); // 输出 2022-02-05T01:01:01
System.out.println(of1); // 输出 2022-08-05T01:01:01
System.out.println(compareTo); // 输出 5年
System.out.println(compareTo1); // 输出 -5年
System.out.println(compareTo2); // 输出 6月
System.out.println(compareTo3); // 输出 8天
}
时间相互转换
@Test
public void ofPattern() {
// 字符串转时间
String dateTime = "2021-01-05 12:00:00";
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(dateTime, df);
// 时间转字符串
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter of = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTime1 = now.format(of);
System.out.println(ldt); // 输出 2021-01-05T12:00
System.out.println(dateTime1); // 输出 2022-08-13 10:15:03
}
计算对应的时间差
// 方式一
@Test
public void duration(){
LocalDateTime now = LocalDateTime.now(); // 当前时间
// 给LocalDateTime 赋值
LocalDateTime of = LocalDateTime.of(2022,7,13,1,1,1);
Duration duration = Duration.between(of,now); // 后面减去前面
long days = duration.toDays(); //相差的天数
long hours = duration.toHours();//相差的小时数
long minutes = duration.toMinutes();//相差的分钟数
long millis = duration.toMillis();//相差毫秒数
long nanos = duration.toNanos();//相差的纳秒数
System.out.println(days); // 输出 31
System.out.println(hours); // 输出 752
System.out.println(minutes); // 输出 45179
System.out.println(millis); // 输出 2710769393
System.out.println(nanos); // 输出 2710863444800000
}
// 方式二
Date currentTime = new Date();
// 查看系统时区 timedatectl | grep "Time zone"
ZoneId zoneId = ZoneId.systemDefault();
// 从一个 Instant和区域ID获得 LocalDateTime实例
LocalDateTime localDateTime = LocalDateTime.ofInstant(currentTime.toInstant(), zoneId);
// 获取次日24点时刻的实例
LocalDateTime tomorrowTime = LocalDateTime.ofInstant(currentTime.toInstant(), zoneId)
.plusDays(1).withHour(23).withMinute(59).withSecond(59).withNano(999);
// ChronoUnit 日期枚举类,between方法计算两个时间对象之间的时间量
long seconds = ChronoUnit.SECONDS.between(localDateTime, tomorrowTime);
System.out.println(seconds);
long minutes = ChronoUnit.MINUTES.between(localDateTime, tomorrowTime);
System.out.println(minutes);
long hours = ChronoUnit.HOURS.between(localDateTime, tomorrowTime);
System.out.println(hours);