JDK1.8时间类API运用简介

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

猜你喜欢

转载自blog.csdn.net/qq844579582/article/details/81608361