zoukankan      html  css  js  c++  java
  • 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) 
    
    */
    
  • 相关阅读:
    【Go语言】I/O专题
    【Go语言】集合与文件操作
    【Go语言】LiteIDE使用的个人使用方法
    【Go语言】错误与异常处理机制
    【Go语言】面向对象扩展——接口
    【Go语言】学习资料
    创建型模式(前引)简单工厂模式Simple Factory
    redis demo
    导出CSV格式
    mongo聚合命令
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11905817.html
Copyright © 2011-2022 走看看