package com.java8.date; import org.junit.Test; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.*; public class DateTest { @Test public void LocalDateTest() { // of方法获取一个指定日期的LocalDate LocalDate date1 = LocalDate.of(2018, 12, 29); System.out.println(date1); System.out.println(date1.getYear()); System.out.println(date1.getMonth()); System.out.println(date1.getMonthValue()); System.out.println(date1.getDayOfMonth()); System.out.println(date1.getDayOfWeek()); System.out.println(date1.getDayOfWeek().getValue()); System.out.println(date1.getDayOfYear()); System.out.println("判断时间前后关系:" + date1.isBefore(date1)); // now 获取当前时间 System.out.println(LocalDate.now()); // 获取指定字段的值 System.out.println(date1.get(ChronoField.YEAR)); System.out.println(date1.get(ChronoField.MONTH_OF_YEAR)); System.out.println(date1.get(ChronoField.DAY_OF_YEAR)); System.out.println(date1.get(ChronoField.DAY_OF_MONTH)); // 多了一些加减运算 //Peroid是针对日期的 , Duration 主要是针对Time的 System.out.println(date1.minus(Period.ofYears(2))); System.out.println(date1.minus(Period.ofDays(2))); System.out.println(date1.minus(Period.ofWeeks(2))); Period between = Period.between(date1.minus(Period.ofYears(2)), date1); Period between2 = Period.between(date1.minus(Period.ofMonths(2)), date1); System.out.println(between.getMonths()); System.out.println(between2.getMonths()); System.out.println("date1.minus(between) = " + date1.minus(between)); LocalDate now = LocalDate.now(); // 替换年 System.out.println(now.withYear(2016)); // 计算某一个时间字段的取值范围 System.out.println(now.range(ChronoField.DAY_OF_MONTH)); } @Test public void LocalTimeTest() { LocalTime now = LocalTime.now(); System.out.println(now); LocalTime time = LocalTime.of(12, 12); System.out.println(time); System.out.println(time.isBefore(now)); // 由于是time所以不支持年字段 System.out.println(time.isSupported(ChronoField.YEAR)); System.out.println(time.isSupported(ChronoUnit.YEARS)); System.out.println(time.isSupported(ChronoUnit.HOURS)); System.out.println(time.format(DateTimeFormatter.ofPattern("hh:mm:ss"))); // Duration 主要是针对Time的,Peroid是针对日期的 System.out.println(" time.minus(Duration.ofHours(2)) = " + time.minus(Duration.ofHours(2))); System.out.println(" time.plus(Duration.ofHours(2)) = " + time.plus(Duration.ofHours(2))); } @Test public void LocalDateTimeTest() { LocalDateTime dateTime = LocalDateTime.now(); //2018-12-29T13:38:03.212 System.out.println(dateTime.toString()); dateTime = LocalDateTime.of(2018, 12, 29, 12, 12); System.out.println(dateTime); //指定今天的12点12分 LocalDateTime toDay1212 = LocalDate.now().atTime(LocalTime.of(12, 12)); System.out.println(toDay1212); //DateTime转Date System.out.println(toDay1212.toLocalDate()); //DateTime转Time System.out.println(toDay1212.toLocalTime()); // 替换某一个时间单位 System.out.println(toDay1212.withHour(14)); } @Test public void instantTest() { System.out.println(Instant.now()); System.out.println(System.currentTimeMillis()); System.out.println(System.nanoTime()); System.out.println(Instant.now().toEpochMilli()); System.out.println(Instant.now().plusNanos(0)); System.out.println(Instant.now().get(ChronoField.NANO_OF_SECOND)); Period between = Period.between(LocalDate.of(2018, 12, 26), LocalDate.of(2018, 12, 28)); System.out.println(between.getDays()); // between表示是一个间隔,做加减法时候只拿间隔做运算,不考虑具体的起止日期 System.out.println(LocalDateTime.now().plus(between)); } @Test public void TemporalAdjusterTest() { // 计算当前日期的加一个周五 System.out.println(LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY))); // 计算该月的最后一天 System.out.println(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth())); // 计算该年的最后一天 System.out.println(LocalDate.now().with(TemporalAdjusters.lastDayOfYear())); } @Test public void DateTimeFormatterTest() { //DateTimeFormatter 线程安全线的 ,SimpleDateFormat线程不安全原因是底层公用一个Calender成员 System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } @Test public void ZoneIdTest() { System.out.println(ZoneId.systemDefault()); } }