9.2 JDK8之前日期时间API

SimpleDateFormat,Calendar的使用

package com.atguigu.java;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * jdk 8 之前的日期时间的API测试
 * 1,System类中currentTimeMillis();
 * 2.java.util.Date和子类java.sql.Date
 * 3.SimpleDateFormat
 * 4.Calendar
 * @author xq
 * @create 2020-12-25-13:21
 */
public class DateTimeTest {
    /*
    SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析

    1.两个操作:
    1.1格式化:日期--->字符串
    1.2解析:格式化逆过程,字符串--->日期

    2.SimpleDateFormat的实例化
     */
    @Test
    public void testSimpleDateFormat() throws ParseException {
        //实例化SimpleDateFormat:使用默认构造器
        SimpleDateFormat sdf = new SimpleDateFormat();

        //格式化:日期--->字符串
        Date date = new Date();
        System.out.println(date);
        String format = sdf.format(date);
        System.out.println(format);

        //解析:格式化逆过程,字符串--->日期
        String str = "20-12-25 下午1:32";
        Date parse = sdf.parse(str);
        System.out.println(parse);

        //******************按照指定的方式格式化和解析:调用带参的构造器***************
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//设置格式
        //格式化
        String format1 = sdf1.format(date);
        System.out.println(format1);
        //解析:要求字符串必须是符合SimpleDateFormat的格式(通过构造器体现)
        //否则,抛异常
        Date date2 = sdf1.parse("2020-12-25 01:41:05");
        System.out.println(date2);
    }


    /*
    练习一:字符串"2020-09-08"转换为java.sql.Date

     */
    @Test
    public void testExer() throws ParseException {
        String birth = "2020-09-08";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf1.parse(birth);
        java.sql.Date birthDate = new java.sql.Date(date.getTime());
        System.out.println(birthDate);
    }
    /*
    Calendar日历类(抽象类)的使用
     */
    @Test
    public void testCalendar(){
        //1.实例化
        //方式一:创建其子类的对象(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();

        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        //set()
        calendar.set(Calendar.DAY_OF_MONTH,22);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        //add()
        calendar.add(Calendar.DAY_OF_MONTH,3);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        //getTime():日历类--->Date
        Date date = calendar.getTime();
        System.out.println(date);
        //setTime():Date--->日历类时间
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
    }
}

9.3 JDK8中新日期时间API

LocalDate、LocalTime、LocalDateTime的使用

package com.atguigu.java;

import org.junit.Test;

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

/**
 * @author xq
 * @create 2020-12-25-14:37
 */
public class JDK8DateTimeTest {
    /*
    LocalDate、LocalTime、LocalDateTime的使用
    说明:
        1.LocalDate相较于LocalTime、LocalDateTime,使用频率要高
        2.类似于Calendar
     */
    @Test
    public void test1(){
        //now():获取当前的日期、时间、日期+时间
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();

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

        //of():设置指定的年、月、日、分、秒。没有偏移量
        LocalDateTime localDateTime1 = LocalDateTime.of(2020, 11, 6, 13, 23, 30);
        System.out.println(localDateTime1);

        //getXxx():获取相关属性
        System.out.println(localDateTime1.getDayOfMonth());


        //不可变性
        //withXxx():设置相关属性
        LocalDate localDate2 = localDate.withDayOfMonth(22);
        System.out.println(localDate);
        System.out.println(localDate2);

        LocalDateTime localDateTime3 = localDateTime.withHour(4);
        System.out.println(localDateTime3);
        System.out.println(localDateTime);

        //不可变性
        LocalDateTime localDateTime4 = localDateTime.plusMonths(3);
        System.out.println(localDateTime4);


    }
}

瞬时:Instant

Instant:时间线上的一个瞬时点。这可能被用来记录应用程序中的时间时间戳

package com.atguigu.java;

import org.junit.Test;

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

/**
 * Instant的使用
 * 类似于java.util.Date类
 * @author xq
 * @create 2020-12-25-15:09
 */
public class InstantTest {
    @Test
    public void test(){
        //now()获取本初子午线对应的标准时间
        Instant instant = Instant.now();
        System.out.println(instant);//2020-12-25T07:12:29.847Z

        //添加时间的偏移量
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);//2020-12-25T15:13:32.622+08:00

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

        //ofEpochMilli()通过给定的毫秒数,获取Instant实例 ---->Date(long millis)
        Instant instant1 = Instant.ofEpochMilli(1608880603387L);
        System.out.println(instant1);
    }


}

9.4 Java比较器

package com.atguigu.java;

import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 一、说明:Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用>或<的
 *      但是在开发场景中,我们需要对多个对象进行排序,即需要比较对象的大小
 *      如何实现?使用两个接口中的任何一个:Comparable或Comparator
 *
 * 二、Comparable接口与Comparator的使用对比:
 *      Comparable接口的方式一旦指定,保证Comparable接口实现类的对象在任何位置都可以比较大小
 *      Comparator接口属于临时性的比较。
 *
 *
 *
 *
 * @author xq
 * @create 2020-12-25-15:51
 */
public class CompareTest {
    /*
    Comparable接口的使用举例:自然排序
    1.像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方式
    2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列
    3.重写compareTo()的规则:
    如果当前对象this大于形参对象obj,则返回正整数
    如果当前对象this小于形参对象obj,则返回负整数
    如果当前对象this等于形参obj时,则返回零
    4.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法
        在compareTo(obj)方法中指明如何排序
     */
    @Test
    public void test1(){
        String[] arr = new String[]{"aa","cc","bb","dd","pp","tt","ee"};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
    /*
    Comparator接口的使用:定制排序
    1.背景
    当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码
    或者实现了java.lang.Comparable接口的排序规则不适合当前的操作
    那么可以考虑使用Comparator的对象来排序
    2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
    如果方法返回正整数,则表示o1大于o2:
    如果返回0,表示相等;
    返回负整数,表示o1小于o2。
     */
    @Test
    public void test(){
        String[] arr = new String[]{"aa","cc","bb","dd","pp","tt","ee"};
        Arrays.sort(arr,new Comparator(){

            //按照字符串从大到小的顺序排列
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof String && o2 instanceof String){
                    String S1 = (String) o1;
                    String S2 = (String) o2;
                    return -S1.compareTo(S2);
                }
                throw new RuntimeException("输入的数据类型不一致");
            }
        });
        System.out.println(Arrays.toString(arr));
    }
}

9.5 System类

package com.atguigu.java;

import org.junit.Test;

import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * 其他常用类的使用
 * 1.System
 * 2.Math
 * 3.BigInteger 和 BigDecimal
 *
 * @author shkstart
 * @create 2019 下午 6:23
 */
public class OtherClassTest {

    @Test
    public void test1() {
        String javaVersion = System.getProperty("java.version");
        System.out.println("java的version:" + javaVersion);

        String javaHome = System.getProperty("java.home");
        System.out.println("java的home:" + javaHome);

        String osName = System.getProperty("os.name");
        System.out.println("os的name:" + osName);

        String osVersion = System.getProperty("os.version");
        System.out.println("os的version:" + osVersion);

        String userName = System.getProperty("user.name");
        System.out.println("user的name:" + userName);

        String userHome = System.getProperty("user.home");
        System.out.println("user的home:" + userHome);

        String userDir = System.getProperty("user.dir");
        System.out.println("user的dir:" + userDir);

    }

    @Test
    public void test2() {
        BigInteger bi = new BigInteger("1243324112234324324325235245346567657653");
        BigDecimal bd = new BigDecimal("12435.351");
        BigDecimal bd2 = new BigDecimal("11");
        System.out.println(bi);
//         System.out.println(bd.divide(bd2));
        System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bd.divide(bd2, 25, BigDecimal.ROUND_HALF_UP));

    }
}

9.6 Math类

9.7 BigInteger和BigDecimal