Java常用类—jdk8新日期API

JDK8的新日期API的背景





- LocalDate、LocalTime、LocalDateTime的使用

@Test
    public void test1(){
        /*
        LocalDate、LocalTime、LocalDateTime的使用
        说明:
            1.LocalDateTime相对于LocalDate、LocalTime,使用频率更高
            2.类似于Calendar的使用
         */

        //now()获取当前时间的生成对象
        LocalTime localTime1=LocalTime.now();
        LocalDate localDate1=LocalDate.now();
        LocalDateTime localDateTime1=LocalDateTime.now();
        System.out.println(localDateTime1.toString());

        //of()设置某个时间的生成对象,没有偏移量
        LocalDateTime localDateTime2=
                LocalDateTime.of
                        (2022,2,19,11,56,10);

        LocalDate.of(2022,2,19);
        LocalTime.of(11,56,10);


        //getXxx(),这里仅展示不做输出
        System.out.println(localDate1.getDayOfMonth());//获取月当中第几天
        System.out.println(localDate1.getDayOfYear());//获取一年当中第几天
        System.out.println(localDate1.getDayOfWeek());//获取一周中的星期几,ps:枚举类

        //不可变性的修改方法,即localDate1的时间不变,仍是当前时间,而变的是返回值
        //withXxx():设置相关的属性
        LocalDate localDate2=localDate1.withDayOfMonth(22);
        System.out.println(localDate1);
        System.out.println(localDate2);
        System.out.println("************************ ");
    }


- 瞬时:Instant的使用

@Test
    public void test2(){
        /*
        Instant的使用
        类似于java.util.Date类
         */

        //now()获取的是本初子午线的时间
        Instant instant=Instant.now();  //返回一个实例
        System.out.println(instant);    //2022-05-07T12:20:01.310Z

        //(可以根据时区)添加时间的偏移量
        OffsetDateTime offsetDateTime=instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime); //2022-05-07T20:20:01.310+08:00

        //toEpochMilli():获取自1970年1月1日0时0分0秒开始的毫秒数
        long milli=instant.toEpochMilli();  //类似System.currentTimeMillis(),但这是本初子午线的时间
        long milli2=System.currentTimeMillis();
        System.out.println(milli);  //上下两个不太一样
        System.out.println(milli2); //

        //ofEpochMilli():通过给定的毫秒数获得Instant实例
        Instant instant1 =Instant.ofEpochMilli(1651926239941L); //类似于Date(Long milli)
        System.out.println(instant1);
    }


- DateTimeFormatter的使用

@Test
    public void test3(){
        /*
        对于LocalDate、localTime、LocalDateTime
        格式化类  DateTimeFormatter  ,类似于SimpleDateFormat

            预定义,3种:
                1.ISO_LOCAL_DATE_TIME、ISO_LOCAL_DATE、ISO_DATE_TIME
                  DateTimeFormatter formatterDateTime=DateTimeFormatter.ISO_LOCAL_DATE_TIME;
                2.本地化
                  -FormatStyle.LONG//MEDIUM//SHORT,适用LocalDateTime
                   DateTimeFormatter formatterDateTime=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
                  -FormatStyle.Full//LONG//MEDIUM//SHORT,适用LocalDate
                   DateTimeFormatter formatterDate=DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
                3.自定义
                  自定义格式(可以格式化LocalDateTime,也可以LocalDate)
                  DateTimeFormatter formatterDateTime1=DateTimeFormatter.ofPattern("yyyy_MM_dd hh:mm:ss,这是我自己的时间");

            格式化:日期-->字符串
                formatterDateTime.format(localDateTime)
            解析: 字符串-->日期
                TemporalAccessor parse = formatterDateTime.parse("2022-02-19T10:55:48.914");
         */

        //标准格式
        DateTimeFormatter formatterDateTime=DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        LocalDateTime localDateTime=LocalDateTime.now();
        LocalDate localDate=LocalDate.now();
        String stringDateTime=formatterDateTime.format(localDateTime);
        System.out.println(localDateTime);  //2022-05-07T20:49:22.545
        System.out.println(stringDateTime); //2022-05-07T20:49:22.545
        //解析:字符串-->日期
        TemporalAccessor parse = formatterDateTime.parse("2022-02-19T10:55:48.914");
        System.out.println(parse.getClass());  //{},ISO resolved to 2022-02-19T10:55:48.914
        //没法向下转型,以下均会报错
//        localDateTime=(LocalDateTime) parse;
//        System.out.println(localDateTime);
//        LocalDate localDate= (LocalDate) parse;
//        System.out.println(localDate);
//        LocalTime localTime= (LocalTime) parse;
//        System.out.println(localTime);





        //本地化相关格式
        //FormatStyle.LONG//MEDIUM//SHORT,适用LocalDateTime
        formatterDateTime=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
        System.out.println(formatterDateTime.format(localDateTime));    //2022年5月7日 下午08时49分22秒
        formatterDateTime=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
        System.out.println(formatterDateTime.format(localDateTime));    //2022-5-7 20:49:22
        formatterDateTime=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
        System.out.println(formatterDateTime.format(localDateTime));    //22-5-7 下午8:49

        //FormatStyle.Full//LONG//MEDIUM//SHORT,适用LocalDate
        DateTimeFormatter formatterDate=DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
        System.out.println(formatterDate.format(LocalDate.now()));  //2022年5月7日 星期六
        formatterDate=DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
        System.out.println(formatterDate.format(LocalDate.now()));  //2022年5月7日
        formatterDate=DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
        System.out.println(formatterDate.format(LocalDate.now()));  //2022-5-7
        formatterDate=DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
        System.out.println(formatterDate.format(LocalDate.now()));  //22-5-7






        //自定义格式(可以格式化LocalDateTime,也可以LocalDate)
        DateTimeFormatter formatterDateTime1=DateTimeFormatter.ofPattern("yyyy_MM_dd hh:mm:ss,这是我自己的时间");
        DateTimeFormatter formatterDateTime2=DateTimeFormatter.ofPattern("yyyy_MM_dd,这是我自己的时间2");
        //格式化
        String str1 = formatterDateTime1.format(localDateTime);
        String str2 = formatterDateTime2.format(localDate);
        System.out.println(str1);   //2022_05_07 09:06:40,这是我自己的时间
        System.out.println(str2);   //2022_05_07,这是我自己的时间2
        //解析
        TemporalAccessor parse1 = formatterDateTime1.parse("2022_02_19 11:33:31,这是我自己的时间");
        System.out.println(parse1); //{MicroOfSecond=0, SecondOfMinute=31, HourOfAmPm=11, MilliOfSecond=0, NanoOfSecond=0, MinuteOfHour=33},ISO resolved to 2022-02-19
        TemporalAccessor parse2 = formatterDateTime2.parse("2022_02_19,这是我自己的时间2");
        System.out.println(parse2); //{},ISO resolved to 2022-02-19
    }

PS:DateTimeFormatter适合格式化,但解析的话不太好用,因为很解析得到LocalDate或者LocalDateTime
解析更适合用LocalDateTime.parse()...
LocalDate date = LocalDate.parse("2022_02_19,这是我自己的时间2", formatterDateTime2);
System.out.println(date);

posted @ 2022-05-07 21:32  JayerListen  阅读(83)  评论(0编辑  收藏  举报