天天看点

(Java学习笔记)JavaSE 日期和时间API1、JDK8之前日期时间API2、JDK8中新日期时间API

日期和时间API

  • 1、JDK8之前日期时间API
    • 1.1 java.lang.System类
    • 1.2、 java.util.Date类
      • 子类:java.sql.Date类
    • 1.3、java.text.SimpleDateFormat类
    • 1.4、. java.util.Calendar(日历)类
  • 2、JDK8中新日期时间API
    • 2.1 LocalDate、LocalTime、LocalDateTime类
    • 2.2、 瞬时:Instant类
    • 2.3、java.time.format.DateTimeFormatter类

1、JDK8之前日期时间API

1.1 java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。也被称为时间戳。

1.2、 java.util.Date类

@Test
    public void test1(){
        //空参构造器:创建一个对应当前日期的date对象
        Date date = new Date();
        System.out.println(date.toString());//Tue Apr 07 09:48:30 CST 2020
        System.out.println(date.getTime());//1586224110988  时间戳
        //构造器:创建指定毫秒数的date对象
        Date date1 = new Date(0L);
        System.out.println(date1);
    }
           

子类:java.sql.Date类

@Test
    public void test2(){
        //构造器
        java.sql.Date date = new java.sql.Date(1262346934745L);
        System.out.println(date);//2010-01-01
        
        //将java.util.Date对象 转化成 java.sql.Date对象
        Date date1 = new Date();
        java.sql.Date date2 = new java.sql.Date(date1.getTime());
        System.out.println(date2);//2020-04-07
    }
           

1.3、java.text.SimpleDateFormat类

java.text.SimpleDateFormat类是对日期Date类的格式化和解析

格式化:日期—>字符串

解析:格式化的逆过程,字符串—>日期

日期和时间模式 结果

"yyyy.MM.dd G 'at' HH:mm:ss z"

2001.07.04 AD at 12:08:56 PDT

"EEE, MMM d, ''yy"

Wed, Jul 4, '01

"h:mm a"

12:08 PM

"hh 'o''clock' a, zzzz"

12 o'clock PM, Pacific Daylight Time

"K:mm a, z"

0:08 PM, PDT

"yyyyy.MMMMM.dd GGG hh:mm aaa"

02001.July.04 AD 12:08 PM

"EEE, d MMM yyyy HH:mm:ss Z"

Wed, 4 Jul 2001 12:08:56 -0700

"yyMMddHHmmssZ"

010704120856-0700

"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

2001-07-04T12:08:56.235-0700

@Test
    public void test3() throws ParseException {
        //实例化:空参构造器
        SimpleDateFormat sdf = new SimpleDateFormat();
        //格式化:日期--->字符串
        Date date = new Date();
        //System.out.println(date);//Tue Apr 07 12:43:16 CST 2020
        //解析:格式化的逆过程,字符串--->日期
        String format = sdf.format(date);
        System.out.println(format);//20-4-7 下午12:44

        //格式化:带参构造器
        SimpleDateFormat sdf1 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//通常使用该格式

        String format1 = sdf1.format(date);
        System.out.println(format1);//星期二, 7 四月 2020 12:52:12 +0800
        String format2 = sdf2.format(date);
        System.out.println(format2);//2020-04-07 12:54:51
        //解析  字符串--->日期
        Date date1 = sdf2.parse("2020-04-07 12:54:51");
        System.out.println(date1);//Tue Apr 07 00:54:51 CST 2020
    }
           

1.4、. java.util.Calendar(日历)类

Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。

获取Calendar实例的方法

  • 使用Calendar.getInstance()方法
  • 调用它的子类GregorianCalendar的构造器。
@Test
    public void test4(){
        //实例化
        Calendar calendar = Calendar.getInstance();
        //常用方法
        //1.get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);//返回当前日期是该月的第几天
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//返回当前日期是该年的第几天
        //2.set()
        calendar.set(Calendar.DAY_OF_YEAR,1000);//设置当前日期为该年的第1000天
        //3.add()
        calendar.add(Calendar.DAY_OF_YEAR,2);//设置当前日期为该年的第几天 后 +2
        //4.getTime():日历类--->Date
        Date time = calendar.getTime();
        //5.setTime():Date --->日历类
        calendar.setTime(new Date());//无返回值
        
    }
           

2、JDK8中新日期时间API

java.time – 包含值对象的基础包

java.time.chrono – 提供对不同的日历系统的访问

java.time.format – 格式化和解析时间和日期

java.time.temporal – 包括底层框架和扩展特性

java.time.zone – 包含时区支持的类

2.1 LocalDate、LocalTime、LocalDateTime类

这三个类的实例化对象时不可变的
  1. LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
  2. LocalTime表示一个时间,而不是日期。
  3. LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
方法 描述
now() 静态方法,根据当前时间创建对象
of() 静态方法,根据指定日期/时间创建对象
getDayOfMonth()/getDayOfYear() 获得月份天数(1-31) /获得年份天数(1-366)
getDayOfWeek() 获得星期几(返回一个 DayOfWeek 枚举值)
getMonth() 获得月份, 返回一个 Month 枚举值
getMonthValue() / getYear() 获得月份(1-12) /获得年份
getHour()/getMinute()/getSecond() 获得当前对象对应的小时、分钟、秒
withDayOfMonth()/withDayOfYear()/ withMonth()/withYear() 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() 向当前对象添加几天、几周、几月、几年、几小时
minusMonths() / minusWeeks()/ minusDays()/minusYears()/minusHours() 从当前对象减去几月、几周、几天、几年、几小时
@Test
    public void test5() {
        //实例化 now()
        LocalDate date = LocalDate.now();
        LocalTime time = LocalTime.now();
        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println(date);//2020-04-07
        System.out.println(time);//13:58:53.467
        System.out.println(dateTime);//2020-04-07T13:58:53.467
        //实例化  of()
        LocalDateTime localDateTime = LocalDateTime.of(2020, 2, 2, 2, 2, 2);
        System.out.println(localDateTime);//2020-02-02T02:02:02
        
    }

           

2.2、 瞬时:Instant类

Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。
java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间 单位。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。 概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒 数。因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。
@Test
    public void test6(){
        //实例化 :now()
        Instant instant = Instant.now();
        System.out.println(instant);//2020-04-07T07:42:56.965Z  本初子午线时间
        //加偏移量,表示东八区 北京时间
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);//2020-04-07T15:45:54.580+08:00
        //方法 toEpochMilli()
        long epochMilli = instant.toEpochMilli();//获取毫秒数
        System.out.println(epochMilli);//1586245671819
        //方法:ofEpochMilli():通过给定的毫秒数,获取Instant实例
        Instant instant1 = Instant.ofEpochMilli(1586245671819L);
        System.out.println(instant1.toString());//2020-04-07T07:47:51.819Z

    }
           

2.3、java.time.format.DateTimeFormatter类

类似于java.text.SimpleDateFormat 用于格式化或解析日期、时间
@Test
    public void  test7(){
        System.out.println(LocalDateTime.now());//2020-04-07T16:09:55.443
        //实例化
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //格式化   自定义格式
        String format = formatter.format(LocalDateTime.now());
        System.out.println(format);//2020-04-07 04:09:55
        //解析
        TemporalAccessor parse = formatter.parse("2020-04-07 04:09:55");
        System.out.println(parse);//{MicroOfSecond=0, SecondOfMinute=55, HourOfAmPm=4, MinuteOfHour=9, NanoOfSecond=0, MilliOfSecond=0},ISO resolved to 2020-04-07
    }
           

注:本文章是根据哔哩哔哩公开课 Java -Java 学习- Java 基础到高级-宋红康-零基础自学Java-尚硅谷 整理所得

大爱康师傅!!