JDK1.8除了新增了lambda表达式、stream流之外,它还新增了全新的日期时间API。
在JDK1.8之前,Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。因此推出了java.time包,该包下的所有类都是不可变类型而且线程安全。
- LocalDate:本地日期,不包含具体时间, 格式 yyyy-MM-dd。
- LocalTime:本地时间,不包含日期. 格式 yyyy-MM-dd HH:mm:ss.SSS 。
- LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
LocalDateTime代码示例:
LocalDate\LocalTime\LocalDateTime的使用
public class LocalDateTimeDemo {
public static void main(String[] args) {
//本地日期,不包括时分秒
LocalDate nowDate = LocalDate.now();
//本地日期,包括时分秒
LocalDateTime nowDateTime = LocalDateTime.now();
System.out.println("当前是:" + nowDate);
System.out.println("当前是:" + nowDateTime);
//当前是:2020-10-12
//当前是:2020-10-12T14:03:12.829
System.out.println("当前年:" + nowDateTime.getYear());
System.out.println("当前年份天数:" + nowDateTime.getDayOfYear());
System.out.println("当前月:" + nowDateTime.getMonthValue());
System.out.println("当前时:" + nowDateTime.getHour());
System.out.println("当前分:" + nowDateTime.getMinute());
System.out.println("当前时间:" + nowDateTime.toString());
//当前年:2020
//当前年份天数:286
//当前月:10
//当前时:14
//当前分:7
//当前时间:2020-10-12T14:07:53.685
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime ldt = LocalDateTime.now();
System.out.println("格式化时间:" + ldt.format(formatter));
//格式化时间:2020-10-12 14:10:51.062
LocalDate ld1 = LocalDate.parse("2017-11-17");
LocalDate ld2 = LocalDate.parse("2018-01-05");
Period period = Period.between(ld1, ld2);
System.out.println("相差年:" + period.getYears() + "相差月:" + period.getMonths() + "相差天:" + period.getDays());
System.out.println("相差月份:" + ChronoUnit.MONTHS.between(ld1,ld2));
System.out.println("相差总天数:" + ChronoUnit.DAYS.between(ld1,ld2));
//相差年:0相差月:1相差天:19
//相差月份:1
//相差总天数:49
LocalDateTime ldt1 = LocalDateTime.now();
LocalDateTime ldt2 = ldt1.plusMinutes(10);
System.out.println("当前时间是否大于:" + ldt1.isAfter(ldt2));
System.out.println("当前时间是否小于:" + ldt1.isAfter(ldt2));
//当前时间是否大于:false
//当前时间是否小于:false
Clock clock = Clock.systemUTC();
System.out.println("当前时间戳:" + clock.millis());
Clock clock2 = Clock.system(ZoneId.of("Asia/Shanghai"));
System.out.println("亚洲上海此时的时间戳:" + clock2.millis());
Clock clock3 = Clock.system(ZoneId.of("America/New_York"));
System.out.println("美洲纽约此时的时间戳:" + clock3.millis());
//当前时间戳:1602483959576
//亚洲上海此时的时间戳:1602483959576
//美洲纽约此时的时间戳:1602483959580
}
}
// LocalDate today = LocalDate.now();
// LocalDate pre = today.minus(1, ChronoUnit.YEARS);
// System.out.println("1----" + pre);
// LocalDate pre2 = today.minusYears(1);
// System.out.println("2----" + pre2);
//
// LocalDate today2 = LocalDate.of(2021,3,30);
// LocalDate preMonth = today2.minus(1, ChronoUnit.MONTHS);
// System.out.println("1----" + preMonth);
// LocalDate pre2Month = today2.minusMonths(1);
// System.out.println("2----" + pre2Month);
在此记录jdk1.8中时间的用法,后续加强练习。