import org.junit.Test;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
/**
* LocalDateTimeTest
*
* @author mr_yi
*/
public class LocalDateTimeTest {
@Test
public void timeTest() {
/* LocalDateTime Date 相互转化 */
LocalDateTime localDateTime = LocalDateTime.ofInstant(new Date().toInstant(),ZoneId.systemDefault());
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
/* 两种方式得到毫秒数*/
System.out.println(date.getTime());
System.out.println(localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
/*使用是需要关注的几个点*/
/*1. LocalDate转化成LocalDateTime*/
System.out.println(LocalDate.now().atStartOfDay());
System.out.println(LocalDate.now().atTime(LocalTime.now()));
System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.now()));
/*2.LocalDateTime转化成DateTime*/
System.out.println(LocalDateTime.now().toLocalDate());
LocalDateTime now = LocalDateTime.now();
LocalDateTime start = now.withDayOfYear(1);
/*3.通用型添加或是减少天数和时间*/
System.out.println(now.plusDays(2));
System.out.println(now.minusDays(2));
System.out.println(now.plus(2, ChronoUnit.HALF_DAYS));
/*4.默认的时间时间字符串解析,注意LocalDateTime默认中间是带一个T*/
System.out.println(LocalDate.parse("2018-10-25"));
System.out.println(LocalTime.parse("00:00:00"));
System.out.println(LocalDateTime.parse("2018-10-25T00:00:00"));
/*5.获取两个时间之间的秒数,天数*/
Duration duration = Duration.ofDays(1);
System.out.println(duration.getNano());
System.out.println(duration.getSeconds());
System.out.println(Duration.between(start, now).toDays());
/*6.获取两个时间之间的年月日*/
Period period = Period.between(start.toLocalDate(),now.toLocalDate());
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());
/*8.字符串和时间的相互转化*/
System.out.println("字符串和时间的相互转化");
/*自带的需要了解两种 BASIC_ISO_DATE:yyyyMMdd ISO_DATE:yyyy-MM-dd*/
System.out.println(now.format(DateTimeFormatter.BASIC_ISO_DATE));
System.out.println(now.format(DateTimeFormatter.ISO_DATE));
System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(LocalDate.parse("19911025",DateTimeFormatter.BASIC_ISO_DATE));
System.out.println(LocalDateTime.parse("2018-08-23 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
/*9.准确的得到一些时间,如本月的第一天,本月的最后一天,本周的第一天等*/
System.out.println("准确的得到一些时间");
System.out.println("当前天数的开始:"+LocalDateTime.now().toLocalDate().atStartOfDay());
System.out.println("当前月份开始的第一天:"+LocalDate.now().withDayOfMonth(1));
System.out.println("当前月份开始的第一天:"+LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("当月的最后一天:"+LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()));
System.out.println("下月份开始的第一天:"+LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth()));
System.out.println("当前星期的最后一天:"+LocalDate.now().with(DayOfWeek.SUNDAY));
System.out.println("下个星期的最后一天:"+LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY)));
}
}
得到的结果如下:
1534065670732
1534065670732
2018-08-12T00:00
2018-08-12T17:21:10.801
2018-08-12T17:21:10.802
2018-08-12
2018-08-14T17:21:10.802
2018-08-10T17:21:10.802
2018-08-13T17:21:10.802
2018-10-25
00:00
2018-10-25T00:00
0
86400
223
0
7
11
字符串和时间的相互转化
20180812
2018-08-12
2018-08-12 17:21:10
1991-10-25
2018-08-23T00:00
准确的得到一些时间
当前天数的开始:2018-08-12T00:00
当前月份开始的第一天:2018-08-01
当前月份开始的第一天:2018-08-01
当月的最后一天:2018-08-31
下月份开始的第一天:2018-09-01
当前星期的最后一天:2018-08-12
下个星期的最后一天:2018-08-19