Java-日期类(JDK8)

  JDK8中新的日期类api。在之前虽然也有Date和Calendar日历类,但是处理日期有一定不方便,而且有偏移性(从0开始),并且不是线程安全的,所以JDK8中的新特性之一就是新的日期类,这简化了日期时间的管理。


Date与SimpleDateFormat

格式化:日期——>字符串

解析:字符串——>日期

   @Test
   public void test1(){
     
       Date date = new Date();
       System.out.println(date);//Sun Feb 28 04:57:46 CST 2021 格式化
       System.out.println(date.getTime());//时间戳,当前日期的毫秒数,1614459466456

       //y 代表年
       //M 代表月
       //d 代表日
       //H 代表24进制的小时
       //h 代表12进制的小时
       //m 代表分钟
       //s 代表秒
       //S 代表毫秒
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss SSS");
       String s = simpleDateFormat.format(date);
       System.out.println(s);//2021-02-28 04-57-46 456

       try {
     
           Date parse = simpleDateFormat.parse("2021-02-28 04-56-08 504"); 解析
           System.out.println(parse);//Sun Feb 28 04:56:08 CST 2021
       } catch (ParseException e) {
     
           e.printStackTrace();
       }

   }

SimpleDateFormat线程不安全
Java-日期类(JDK8)_第1张图片


JDK8

本地时间日期Local

一般使用now或者of方法实例化local日期时间对象。

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

now方法

    @Test
    public void TestDate1(){
     
        //now()获取当前日期时间
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();//使用频率更高

        System.out.println(localDate);//2021-02-27
        System.out.println(localTime);//22:07:09.125
        System.out.println(localDateTime);//2021-02-27T22:07:09.125
    }

of方法

指定时间日期

    @Test
    public void TestDate2(){
     
        //of()指定日期,没有偏移量
        LocalDateTime localDateTime = LocalDateTime.of(2021,1,1,12,12,12);
        System.out.println(localDateTime);//2021-01-01T12:12:12
    }

get方法

获取相关属性

    @Test
    public void TestDate3(){
     
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);//2021-02-27T22:22:52.143

        System.out.println(localDateTime.getYear());//2021
        System.out.println(localDateTime.getDayOfYear());//58
    }

Java-日期类(JDK8)_第2张图片
根据命名可以知道方法功能。

with方法

设置相关属性

    @Test
    public void TestDate4(){
     
    	//不可变性,不影响本身时间
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);//2021-02-27T22:35:09.096
        
        LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(13);//修改为本月的多少天
        System.out.println(localDateTime1);//2021-02-13T22:35:09.096

//        LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(40);
//        System.out.println(localDateTime1);
//        java.time.DateTimeException: 不能超过范围
//        Invalid value for DayOfMonth (valid values 1 - 28/31): 40
        
        LocalDateTime localDateTime2 = localDateTime.withDayOfYear(35);//修改为本年的多少天
        System.out.println(localDateTime2);//2021-02-04T22:35:09.096
        
        LocalDateTime localDateTime3 = localDateTime.withHour(2);//修改小时
        System.out.println(localDateTime3);//2021-02-04T02:35:09.096
		
    }

Java-日期类(JDK8)_第3张图片

plus/minus方法

在原有基础上,添加、减去时间日期。

    @Test
    public void TestDate5(){
     
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);//2021-02-27T22:44:33.848

        LocalDateTime localDateTime1 = localDateTime.plusHours(2);
        System.out.println(localDateTime1);//2021-02-28T00:44:33.848

        LocalDateTime localDateTime2 = localDateTime.minusDays(5);
        System.out.println(localDateTime2);//2021-02-22T22:46:27.612

    }

Java-日期类(JDK8)_第4张图片
Java-日期类(JDK8)_第5张图片


Instant类

时间戳,类似于java.util.Date类

    @Test
    public void test1(){
     
        //时间戳
        Instant instant = Instant.now();
        System.out.println(instant);//2021-02-27T15:41:40.496Z,标准时间

        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); //添加偏移量
        System.out.println(offsetDateTime);//2021-02-27T23:41:40.496+08:00,东八区


        long milli = instant.toEpochMilli();//获取自1970/1/1/00:00:00 开始的毫秒数
        System.out.println(milli);//1614440500496

        Instant instant1 = Instant.ofEpochMilli(1614439220460L); //通过给定毫秒数,返回时间
        System.out.println(instant1);//2021-02-27T15:20:20.460Z
    }

DateTimeFormatter日期时间格式化类

格式化或者解析日期时间,类似于SImpleDateFormat,但是这是一个不可变且线程安全的
在这里插入图片描述

格式化:日期——>字符串 —— format方法
解析:字符串——>日期 ——parse方法

最常用的自定义方式

    @Test
    public void test3(){
     
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

        String s = dateTimeFormatter.format(LocalDateTime.now());
        System.out.println(s);//2021-02-28 04:39:49

        TemporalAccessor parse = dateTimeFormatter.parse("2021-02-28 04:37:01");
        System.out.println(parse);//{SecondOfMinute=1, MinuteOfHour=37, NanoOfSecond=0, MicroOfSecond=0, MilliOfSecond=0, HourOfAmPm=4},ISO resolved to 2021-02-28

    }

预定义的标准格式

@Test
    public void test1(){
     
        //预定义的标准格式
        DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        LocalDateTime now = LocalDateTime.now();

        String s = isoLocalDate.format(now);//格式化,类型改变 日期——>字符串

        System.out.println(now);//2021-02-28T04:41:18.110
        System.out.println(s);//2021-02-28T04:41:18.11

        TemporalAccessor parse = isoLocalDate.parse("2021-02-28T04:09:40.075");//解析:字符串——>日期
        System.out.println(parse);//{},ISO resolved to 2021-02-28T04:09:40.075

    }

三种格式
Java-日期类(JDK8)_第6张图片

本地化相关

Java-日期类(JDK8)_第7张图片

Java-日期类(JDK8)_第8张图片
FUll是LocalDate形式,不能使用LocalDateTime,否则报错

    @Test
    public void test2(){
     
        //本地化相关
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
        DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);

        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);//2021-02-28T04:42:11.793

        String s = dateTimeFormatter.format(now);
        System.out.println(s);//2021-2-28 4:42:11
        String s1 = dateTimeFormatter1.format(now);
        System.out.println(s1);//2021年2月28日 上午04时42分11秒
        String s2 = dateTimeFormatter2.format(now);
        System.out.println(s2);//21-2-28 上午4:42

        System.out.println("----------");

        DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
        LocalDate now1 = LocalDate.now();
        System.out.println(now1);//2021-02-28

        String format = dateTimeFormatter3.format(now1);
        System.out.println(format);//2021年2月28日 星期日
        TemporalAccessor parse = dateTimeFormatter3.parse("2021年2月28日 星期日");
        System.out.println(parse);//{},ISO resolved to 2021-02-28

        //一般使用自定义,除非有要求

    }


与传统日期处理转换

Java-日期类(JDK8)_第9张图片

你可能感兴趣的:(Java,java,date,jdk1.8)