JAVA 8 新时间 API java.time 使用简介

来源:互联网 发布:瓦尔登湖 知乎 编辑:程序博客网 时间:2024/06/06 14:25

JAVA 8 引入新时间API原因是原来的Date类无法支持多线程操作,新时间API支持多线程操作,当java.time包内时间类其值发生改变时,其如同String类,类的实例是不可变的对象,当改变其值的时候就会新生成对象地址,从而改变其对象地址,以保证支持多线程操作。

新的java.time包内类默认均采用ISO-8601时区标准

<给计算机看的时间>
Instant 时间戳 在时间线上的瞬间点 在ISO- 2007-12-03T10:15:30
-> 2007-12-03T10:15:30 .000Z。
<自己使用的日期时间>
LocalDate 在ISO- 2007-12-03 -> 2007-12-03 。
LocalDateTime 在ISO- 2007-12-03T10:15:30 -> 2007-12-03T10:15:30 。
LocalTime 在ISO- 10:15:30 -> 10:15:30 。

Duration 和Period
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔

package java8.time;import java.time.Duration;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.Period;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import java.util.Locale;import java.util.Set;import org.junit.Test;public class Demo {    /**     * 计算时间差     */    @Test    public void test1() {        Instant time1 = Instant.now(); // 获取系统当前        System.out.println(time1);        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        Instant time2 = Instant.now();// 获取休眠后系统时间        Duration duration = Duration.between(time1, time2);        // 计算两个时间的差值        System.out.println(duration.toMillis());    }    @Test    public void test2() {        LocalDateTime time1 = LocalDateTime.now();        System.out.println(time1);        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        LocalDateTime time2 = LocalDateTime.now();        Duration duration = Duration.between(time1, time2);        System.out.println(duration.toMillis());    }    /*     * 计算两日期相差时间     */    @Test    public void test3() {        LocalDate date1 = LocalDate.now();        LocalDate date2 = date1.plusDays(5);        Period period = Period.between(date1, date2);        System.out.println(period.getDays());    }    /*     * 输入指定日期 按照指定日期格式输出 默认采用ISO-8601日历系统     */    @Test    public void test4() {        LocalDateTime time = LocalDateTime.of(1997, 06, 13, 12, 59, 0);        time = time.plusMinutes(1);        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd : hh:mm:ss");        String formatTime = formatter.format(time);        System.out.println(formatTime);    }    /*     * 修改默认日期格式     */    @Test    public void test5() {        // 获取所有日期格式        Set<String> set = ZoneId.getAvailableZoneIds();        // 获取所有亚洲国家时区        set.stream().filter(e -> e.startsWith("Asia")).forEach(System.out::println);        LocalDateTime time = LocalDateTime.now(ZoneId.of("Asia/Hong_Kong"));        // format 第二个参数 指定国家        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd : hh:mm:ss", Locale.CHINA);        System.out.println(formatter.format(time));        System.out.println(time);    }}
原创粉丝点击