java 8時間使用LocalDateTime,ZonedDateTime,LocalDate

前言

java 8的時間已經能夠滿足日常的使用,也方便理解。joda-time作爲一個有優秀的時間組件也不得不告知使用者在java 8以後使用自帶的時間

LocalDateTime以及ZonedDateTime使用

這兩個時間的formate方法是返回DateTimeFormatter後的String 靜態方法parse是返回對應的類型 例子如下

import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
public class Java8DateTimeTest {
    /**
     * 日期格式轉換yyyy-MM-dd‘T‘HH:mm:ss.SSSXXX  TO  yyyy-MM-dd HH:mm:ss
     *
     * @throws ParseException
     */
    //public static DateTimeFormatter utcformat = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    public static DateTimeFormatter utcformat2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

    //public static DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
    public static DateTimeFormatter generalformat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");


    public static void main(String[] args) {
        String utctimeStr = "2017-06-15T10:02:02.000+08:00";
        String generalTime = "2017-06-15 00:02:02";
        ZoneId shanghaiZoneId = ZoneId.of("Asia/Shanghai");
        //時區時間變爲iso8061時間
        log.info("generalTime time  {} convert jdk8 time  {}", generalTime, LocalDateTime.parse(generalTime, generalformat).toString());

        //iso8061時間轉變爲攜帶上海時區的時間
        LocalDateTime localDateTime = LocalDateTime.parse(generalTime, generalformat);
        //2017-06-15T00:02:02
        log.info("localDateTime {}", localDateTime);
        //2019-11-19T16:31:31.758+0800
        ZonedDateTime zonedDateTime1 = localDateTime.atZone(shanghaiZoneId);
        //2017-06-15T00:02:02.000+08:00
        log.info("##zonedDateTime1 {}", zonedDateTime1.format(utcformat2));

        //攜帶時區時間轉變爲 yyyy-MM-dd HH:mm:ss格式
        //2017-06-15T10:02:02+08:00
        ZonedDateTime zonedDateTime2 = ZonedDateTime.parse(utctimeStr);
        //###2017-06-15 10:02:02
        log.info("##zonedDateTime2 to generalformat {}", zonedDateTime2.format(generalformat));
    }

}

LocalDate

LocalDate是用作年月日的使用很方便

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

@Data
@Slf4j
public class Java8LocalDateTest implements Serializable {
    private static final long serialVersionUID = 8589835559483231840L;
    private String date;

    //get set..
    //因爲格式是yymmdd所以只能是LocalDate,否則會拋出異常
    public static LocalDate parseStr2LocalDate(String datestr, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        LocalDate localDate;
        localDate = LocalDate.parse(datestr, dateTimeFormatter);
        return localDate;
    }

    public static void main(String[] args) {

        List<Java8LocalDateTest> list = new ArrayList<>();
        Java8LocalDateTest on1 = new Java8LocalDateTest();
        on1.setDate("2018-05-17");

        Java8LocalDateTest on2 = new Java8LocalDateTest();
        on2.setDate("2018-05-16");

        Java8LocalDateTest on3 = new Java8LocalDateTest();
        on3.setDate("2018-05-18");

        Java8LocalDateTest on4 = new Java8LocalDateTest();
        on4.setDate("2018-05-15");

        list.add(on1);
        list.add(on2);
        list.add(on3);
        list.add(on4);

        //升序與降序
        /*steam()是Collections方法,返回的是Stream對象流*/

        /*Stream<T> sorted(Comparator<? super T> comparator)
        返回由該流的元素組成的流,根據提供的Comparator進行排序。
        對於有序流,排序穩定。 對於無序的流,不能保證穩定性。*/

        /* 以下將將字符串累加到ArrayList中:
        List<String> asList = stringStream.collect(Collectors.toList());*/

        List<Java8LocalDateTest> collect = list.stream().sorted(new Comparator<Java8LocalDateTest>() {
            @Override
            public int compare(Java8LocalDateTest o1, Java8LocalDateTest o2) {
                LocalDate d1 = parseStr2LocalDate(o1.getDate(), "yyyy-MM-dd");
                LocalDate d2 = parseStr2LocalDate(o2.getDate(), "yyyy-MM-dd");
                //return d1.compareTo(d2);升序
                return d2.compareTo(d1);
            }
        }).collect(Collectors.toList());

        for (Java8LocalDateTest java8LocalDateTest : collect) {
            log.info("object = {}", java8LocalDateTest.toString());
        }
    }
}


/*輸出
object = Java8LocalDateTest(date=2018-05-18) 
object = Java8LocalDateTest(date=2018-05-17) 
object = Java8LocalDateTest(date=2018-05-16) 
object = Java8LocalDateTest(date=2018-05-15) 

*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章