Java8时间类LocalDate常用操作

 

java.time包中的是类是不可变且线程安全的。

新的时间及日期API位于java.time中,下面是一些关键类

Instant——它代表的是时间戳,注意这里默认的Instant比北京少8个时区

LocalDate——不包含具体时间的日期,比如2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。

LocalTime——它代表的是不含日期的时间

LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说时区。

ZonedDateTime——这是一个包含时区的完整的日期时间,偏移量是以UTC/格林威治时间为基准的,如:2018-10-08T18:12:38.547+08:00[Asia/Shanghai]。

一个例子给出一个时间段,计算该时间范围由哪些天和月组成

 

1. Date转LocalDate

Date首先转化为Instant时间戳,

/**
     * Date转LocalDate: Date -> Instant + System default time zone = LocalDate
     */
    @Test
    public void dateToLocalDateAndLocalDateTime(){
        Date date = new Date();
        Instant instant = date.toInstant();
        /**
         * instant : 2018-10-08T09:50:21.852Z
         * Zone : UTC+0
         * 注意这里默认的Instant是比北京少8个时区
         */


        //获得本地默认时区
        ZoneId defaultZoneId = ZoneId.systemDefault();

        LocalDate localDate = instant.atZone(defaultZoneId).toLocalDate();
        System.out.println(localDate);
     //2018-10-08 }

2. 13位long类型转LocalDate

long -> Instant +System default time zone = LocalDate

public LocalDate longToLocalDate(Long time){

        //System Default TimeZone : Asia/Shanghai
        ZoneId defaultZoneId = ZoneId.systemDefault();

        //2018-01-04T16:00:00Z
        //时间戳
        Instant instant = Instant.ofEpochMilli(time);

        //2018-01-05
        LocalDate localDate = instant.atZone(defaultZoneId).toLocalDate();

        return localDate;
    }

3. 获取现在的日期

Java8中有个叫LocalDate的类,能用来表示日期。这个类与java.util.Date略有不同,因为它只包含日期,没有时间。

 

4. 获取年月日

5. 判断两个日期之间相差多少天

 

/**
     * 判断两个日期相差多少天
     */
    @Test
    public void localDateDiff(){
        LocalDate date1 = LocalDate.of(2018,9,20);
        LocalDate date2 = LocalDate.of(2018,10,3);
        long l = date2.toEpochDay() - date1.toEpochDay();
        System.out.println(l);
    }

 未完待续

部分参考:

https://www.cnblogs.com/comeboo/p/5378922.html

http://www.mkyong.com/java8/java-8-convert-date-to-localdate-and-localdatetime/

猜你喜欢

转载自www.cnblogs.com/theRhyme/p/9756154.html