Java8之新时间日期API

1.LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
2.Instant时间戳
3.Duration和Period
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔
4.日期的操纵
TemporalAdjuster:时间校正器,比如将时间调整到“下个周日”
TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现
5.解析与格式化
Java.time.format.DateTimeFormatter类——该类提供了三种格式化方法
预定义的标准格式
语言环境相关的格式
自定义的格式
6.时区的处理
Java8中加入了对时区的支持,带时区的时间分别为:ZonedDate、ZonedTime、ZonedDateTime,其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式。
ZoneId:该类中包含了所有的时区信息
getAvailableZoneIds():可以获取所有时区信息
of(id):用指定的时区信息获取ZoneId对象

package com.alisa.java8.time;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Set;

@RunWith(SpringRunner.class)
@SpringBootTest
public class LocalDateTimeTest {
     
    //1、LocalDate、LocalTime、LocalDateTime
    @Test
    public void test1(){
     
        LocalDateTime ldt1 = LocalDateTime.now();
        System.out.println(ldt1);

        LocalDateTime ldt2 = LocalDateTime.of(2019,8,18,21,49,40);
        System.out.println(ldt2);

        LocalDateTime ldt3 = ldt2.plusYears(2);
        System.out.println(ldt3);

        LocalDateTime ldt4 = ldt2.minusMonths(2);
        System.out.println(ldt4);

        System.out.println(ldt1.getYear());
        System.out.println(ldt1.getMonthValue());
        System.out.println(ldt1.getDayOfMonth());
        System.out.println(ldt1.getHour());
        System.out.println(ldt1.getMinute());
        System.out.println(ldt1.getSecond());
    }

    //2、Instant:时间戳
    @Test
    public void test2(){
     
        Instant ins1 = Instant.now();
        System.out.println(ins1.toEpochMilli());

        OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
        System.out.println(odt);

        Instant ins2 = Instant.ofEpochSecond(5);
        System.out.println(ins2);
    }

    //3、Duration:用于计算两个“时间”间隔
    //   Period:用于计算两个“日期”间隔
    @Test
    public void test3(){
     
        Instant ins1 = Instant.now();
        try {
     
            Thread.sleep(10000);
        } catch (InterruptedException e) {
     
        }
        Instant ins2 = Instant.now();
        System.out.println("耗费时间为:"+ Duration.between(ins1,ins2));
        System.out.println("============================");
        LocalDate ld1 = LocalDate.now();
        LocalDate ld2 = LocalDate.of(2018,8,18);
        Period pe = Period.between(ld2,ld1);
        System.out.println(pe.getYears());
        System.out.println(pe.getMonths());
        System.out.println(pe.getDays());
    }

    //4、TemporalAdjuster:时间校正器
    @Test
    public void test4(){
     
        LocalDateTime ldt1 = LocalDateTime.now();
        System.out.println(ldt1);

        LocalDateTime ldt2 = ldt1.withDayOfMonth(10);
        System.out.println(ldt2);

        LocalDateTime ldt3 = ldt1.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
        System.out.println(ldt3);

        //自定义下一个工作日
        LocalDateTime ldt4 = ldt1.with((time) -> {
     
            LocalDateTime ldt5 = (LocalDateTime) time;
            DayOfWeek dow = ldt5.getDayOfWeek();
            if(dow.equals(DayOfWeek.FRIDAY)){
     
                return ldt5.plusDays(3);
            }else if(dow.equals(DayOfWeek.SATURDAY)){
     
                return ldt5.plusDays(2);
            }else{
     
                return ldt5.plusDays(1);
            }
        });
        System.out.println(ldt4);
    }

    //5、DateTimeFormatter:解析和格式化日期或时间
    @Test
    public void test5(){
     
        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        LocalDateTime ldt1 = LocalDateTime.now();
        System.out.println(ldt1.format(dtf1));
    }

    //6、ZonedDate、ZonedTime、ZonedDateTime:带时区的时间或日期
    @Test
    public void test6(){
     
        //获取所有时区
        Set<String> set = ZoneId.getAvailableZoneIds();
        //set.forEach(System.out::println);

        LocalDateTime ldt1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        System.out.println(ldt1);
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));
        System.out.println(zdt);
    }
}

你可能感兴趣的:(Java8,java8)