java日期时间API--jdk8后

1.为什么jdk8要引出新日期时间API出现的背景

jdk8前面临的问题:

可变性:像日期和时间这样的类应该是不可变的

偏移性:Date中的年份是从1970年开始的,而月份都是从0开始的

格式化:格式化只对Date有用,Calendar则不行

此外,他们也不是线程安全的;不能处理闰秒等

2.jdk8大部分使用LocalDate、LocalTime、LocalDateTime

下面我们说一下LocalDate、LocalTime、LocalDateTime的使用:

LocalDate相较于LocalTime、LocalDateTime用的更加频繁

三个类的方法的调用:

@Test
    public void test1(){
        //now() 调用now()方法获取当前日期、时间、日期+时间
        System.out.println("*****now() 调用now()方法获取当前日期、时间、日期+时间*****");
        LocalDate localDate=LocalDate.now();
        LocalTime localTime=LocalTime.now();
        LocalDateTime localDateTime=LocalDateTime.now();

        out.println(localDate);
        out.println(localTime);
        out.println(localDateTime);

        //of():设置指定的年月日时分秒。没有偏移量
        out.println("*****of():设置指定的年月日时分秒。没有偏移量*****");
        LocalDateTime localDateTime1=LocalDateTime.of(2022,1,23,17,48,58);
        out.println(localDateTime1);

        //getXxx() :获取相关属性
        out.println("*****getXxx() :获取相关属性******");
        out.println(localDateTime.getYear());
        out.println(localDateTime.getMonth());
        out.println(localDateTime.getDayOfMonth());
        out.println(localDateTime.getMonthValue());
        out.println(localDateTime.getMinute());
        out.println(localDateTime.getDayOfYear());

        //体现不可变性
        //withXxx():设置相关属性
        out.println("******withXxx():设置相关属性******");
        LocalDate localDate1=localDate.withDayOfMonth(22);
        out.println(localDate);
        out.println(localDate1);

        LocalDateTime localDateTime2= localDateTime.withHour(4);
        out.println(localDateTime);
        out.println(localDateTime2);



        //plusXxx()加
        out.println("******plusXxx()加*****");
        LocalDateTime localDateTime3=localDateTime.plusMonths(3);
        out.println(localDateTime);
        out.println(localDateTime3);
        //minusXxx()减
        out.println("******minusXxx()减*****");
        LocalDateTime localDateTime4=localDateTime.minusMonths(3);
        out.println(localDateTime);
        out.println(localDateTime4);

    }

3.Istant类介绍:

    @Test
    public void test2(){
        //now():获取本初子午线对应的标准时间
        Instant instant= Instant.now();
        out.println(instant);//2022-01-23T13:09:14.172Z
        //添加时间的偏移量
        OffsetDateTime offsetDateTime=instant.atOffset(ZoneOffset.ofHours(8));
        out.println(offsetDateTime);//2022-01-23T21:09:14.172+08:00

        //获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数
        long milli=instant.toEpochMilli();
        System.out.println(milli);//1642943508671
    }

4.DateTimeFormatter

* DateTimeFormatter:时间日期的格式化和解析
* 类似于SimpleDateFormat
* java.time.format.DateTimeFormatter该类提供了三种格式化方法:
* 方式一:预定义标准格式。如:ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE;ISO_LOCAL
* 方式二:自定义格式。如:ofPattern("yyyy-MM-dd hh:mm:ss E")
* 方式三:本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG);
 @Test
    public void test3(){
         //方式一:预定义标准格式。如:ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE;ISO_LOCAL
         //格式化
         DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ISO_LOCAL_DATE_TIME;
         LocalDateTime localDateTime=LocalDateTime.now();
         String format=dateTimeFormatter.format(localDateTime);
         System.out.println("方式一:预定义标准格式。如:ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE;ISO_LOCAL");
         System.out.println(localDateTime);//2022-01-23T21:43:07.198
         System.out.println(format);//2022-01-23T21:43:07.198 因为时=是预定义标准格式  所以基本都一样
         //解析:逆过程 将字符串转化成日期
         TemporalAccessor parse = dateTimeFormatter.parse(format);
         System.out.println("解析后的结果");
         System.out.println(parse);//{},ISO resolved to 2022-01-23T22:07:45.224



         //方式二:自定义的格式。如:ofPattern("yyyy-MM-dd hh:mm:ss E")
         DateTimeFormatter dateTimeFormatter1=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss E");
         LocalDateTime localDateTime1=LocalDateTime.now();
         String format1=dateTimeFormatter1.format(localDateTime1);
         System.out.println("方式二:自定义的格式。如:ofPattern(\"yyyy-MM-dd hh:mm:ss E\")");
         System.out.println(localDateTime1);//2022-01-23T21:53:28.703
         System.out.println(format1);//2022-01-23 09:53:28

         //解析
         TemporalAccessor parse1 = dateTimeFormatter1.parse(format1);
         System.out.println("解析后的结果");
         System.out.println(parse1);//{MilliOfSecond=0, SecondOfMinute=49, MinuteOfHour=13, HourOfAmPm=10, MicroOfSecond=0, NanoOfSecond=0},ISO resolved to 2022-01-23

         //方式三:本地化相关的格式。如:ofLocalizedDateTime()
         //FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:适用于LocalDateTime
         System.out.println("方式三:本地化相关的格式。如:ofLocalizedDateTime()");
         DateTimeFormatter dateTimeFormatter2=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
         LocalDateTime localDateTime2=LocalDateTime.now();
         String format2 = dateTimeFormatter2.format(localDateTime2);
         System.out.println(format2);//2022年1月23日 下午10时42分48秒
         //解析
         TemporalAccessor parse2 = dateTimeFormatter2.parse(format2);
         System.out.println(parse2);//{},ISO resolved to 2022-01-23T22:42:48

         //FormatStyle.SHORT
         DateTimeFormatter dateTimeFormatter3=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
         LocalDateTime localDateTime3=LocalDateTime.now();
         String format3 = dateTimeFormatter3.format(localDateTime3);
         System.out.println(format3);//22-1-23 下午10:42
         //解析
         TemporalAccessor parse3 = dateTimeFormatter3.parse(format3);
         System.out.println(parse3);//{},ISO resolved to 2022-01-23T22:42

         //方式二:本地相关的格式 如:ofLocalizedDate()
         //FormatStyle.Full/FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:适用于LocalDate
         DateTimeFormatter dateTimeFormatter4=DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
         LocalDate localDate=LocalDate.now();
         String format4 = dateTimeFormatter4.format(localDate);
         System.out.println(format4);//2022年1月23日 星期日
         //解析
         TemporalAccessor parse4 = dateTimeFormatter4.parse(format4);
         System.out.println(parse4);//{},ISO resolved to 2022-01-23


     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值