JavaSE10:日期时间类、java比较器、System类、Math类、大数类

写在前面

常用类的学习结束了,现在就简单整理和通过一些小demo来巩固一下吧~

JDK8.0之前的日期时间类

1. java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。该方法适用于计算时间差

2. java.util.Date类

简单介绍

java有两个Date类: java.util.Date类及其子类java.sql.Date类
Date类可以用来表示特定的瞬间,精确到毫秒,很多方法已经弃用了
在这里插入图片描述

构造器

无参构造:使用无参构造器创建的对象可以获取本地当前时间。

 public Date() {
    
    
        this(System.currentTimeMillis());
    }

有参构造:传入一个long型毫秒数时间值(无参构造可以调用)

 public Date(long date) {
    
    
        fastTime = date;
    }
常用方法

getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

public long getTime() {
    
    
        return getTimeImpl();
    }

    private final long getTimeImpl() {
    
    
        if (cdate != null && !cdate.isNormalized()) {
    
    
            normalize();
        }
        return fastTime;
    }

toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。

public String toString() {
    
    
        // "EEE MMM dd HH:mm:ss zzz yyyy";
        BaseCalendar.Date date = normalize();
        StringBuilder sb = new StringBuilder(28);
        int index = date.getDayOfWeek();
        if (index == BaseCalendar.SUNDAY) {
    
    
            index = 8;
        }
        convertToAbbr(sb, wtb[index]).append(' ');                        // EEE
        convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' ');  // MMM
        CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

        CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':');   // HH
        CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
        CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
        TimeZone zi = date.getZone();
        if (zi != null) {
    
    
            sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz
        } else {
    
    
            sb.append("GMT");
        }
        sb.append(' ').append(date.getYear());  // yyyy
        return sb.toString();
    }
demo
package com.deserts.demo02;

import java.util.Date;

public class DateTest {
    
    
    public static void main(String[] args) {
    
    
        //构造器
        Date date = new Date();
        //getTime()
        System.out.println(date.getTime());
        //toString
        System.out.println(date.toString());
    }
}

运行结果:
在这里插入图片描述

3. java.text.SimpleDateFormat类

简单说明

1.Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
2.它允许进行格式化:日期文本、解析:文本日期

格式化

1.SimpleDateFormat() :默认的模式和语言环境创建对象
2. public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
3.public String format(Date date):方法格式化时间对象date

解析

public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。

demo
简单的格式化与解析:调用无参构造器
package com.deserts.demo02;

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

public class FormatTest {
    
    
    public static void main(String[] args) {
    
    
        //实例化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-7-14 上午00:29";
        Date date1 = null;
        try {
    
    
            date1 = sdf.parse(str);
        } catch (ParseException e) {
    
    
            e.printStackTrace();
        }
        System.out.println(date1);


    }
}

运行结果
在这里插入图片描述
按照指定的方式格式化和解析:调用带参的构造器

package com.deserts.demo02;

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

public class FormatTest02 {
    
    
    public static void main(String[] args) {
    
    
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = new Date();
        //格式化
        String format1 = sdf1.format(date);
        System.out.println(format1);
        //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
        //否则,抛异常
        Date date2 = null;
        try {
    
    
            date2 = sdf1.parse("2020-07-14 00:37:27");
        } catch (ParseException e) {
    
    
            e.printStackTrace();
        }
        System.out.println(date2);
    }
}

运行结果
在这里插入图片描述

4. java.util.Calendar(日历)类

简单介绍

Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
在这里插入图片描述

获取Calendar实例的方法

1.使用Calendar.getInstance()方法
2.调用它的子类GregorianCalendar的构造器。

demo
package com.deserts.demo02;

import java.util.Calendar;
import java.util.Date;

public class CalendarTest {
    
    
    public static void main(String[] args) {
    
    
        //1.实例化
        //方式一:创建其子类(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()
        //calendar可变性
        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);

    }
}

运行结果
在这里插入图片描述偏移量测试

package com.deserts.demo02;

import java.util.Date;

public class JDK8DateTest {
    
    
    public static void main(String[] args) {
    
    
        //偏移量
        Date date1 = new Date(2020 - 1900,7 - 1,14);
        System.out.println(date1);//Tue Jul 14 00:00:00 CST 2020
    }
}

JDK8.0中新日期时间API(重点)

简单介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述

LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。

1.LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
2.LocalTime表示一个时间,而不是日期。
3.LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。

注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法,也就是公历。

demo

package com.deserts.demo02;

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

public class JDK8DateTest {
    
    
    public static void main(String[] args) {
    
    
        //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, 7, 14, 8, 56, 43);
        System.out.println(localDateTime1);


        //getXxx():获取相关的属性
        System.out.println(localDateTime.getDayOfMonth());
        System.out.println(localDateTime.getDayOfWeek());
        System.out.println(localDateTime.getMonth());
        System.out.println(localDateTime.getMonthValue());
        System.out.println(localDateTime.getMinute());

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


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

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

        LocalDateTime localDateTime4 = localDateTime.minusDays(6);
        System.out.println(localDateTime);
        System.out.println(localDateTime4);
    }
}

运行结果
在这里插入图片描述

瞬时:Instant

Instant的使用类似于 java.util.Date类
在这里插入图片描述

常用方法

在这里插入图片描述

demo
package com.deserts.demo02;

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

public class InstanceTest {
    
    
    public static void main(String[] args) {
    
    
        //now():获取本初子午线对应的标准时间
        Instant instant = Instant.now();
        System.out.println(instant);

        //添加时间的偏移量
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);

        //toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数  ---> Date类的getTime()
        long milli = instant.toEpochMilli();
        System.out.println(milli);

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

运行结果

在这里插入图片描述

格式化:DateTimeFormatter 类

常用方法

在这里插入图片描述

demo

方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME

package com.deserts.demo02;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatTest03 {
    
    
    public static void main(String[] args) {
    
    
        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //格式化:日期-->字符串
        LocalDateTime localDateTime = LocalDateTime.now();
        String str1 = formatter.format(localDateTime);
        System.out.println(localDateTime);
        System.out.println(str1);
        //解析:字符串 -->日期
        TemporalAccessor parse = formatter.parse("2020-07-14T09:13:58.131");
        System.out.println(parse);
    }
}

运行结果
在这里插入图片描述
方式二:本地化相关的格式。如:ofLocalizedDateTime()

package com.deserts.demo02;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class FormatTest04 {
    
    
    public static void main(String[] args) {
    
    
        DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
        LocalDateTime localDateTime = LocalDateTime.now();
        //格式化
        String str2 = formatter1.format(localDateTime);
        System.out.println(str2);//2020年7月14日 上午09时18分53秒


//      本地化相关的格式。如:ofLocalizedDate()
//      FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适用于LocalDate
        DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
        //格式化
        String str3 = formatter2.format(LocalDate.now());
        System.out.println(str3);//2020-7-14

    }
}

方式三(重点):自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)

package com.deserts.demo02;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;

public class FormatTest05 {
    
    
    public static void main(String[] args) {
    
    
        DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //格式化
        String str4 = formatter3.format(LocalDateTime.now());
        System.out.println(str4);//2020-07-14 09:22:28

        //解析
        TemporalAccessor accessor = formatter3.parse("2020-07-14 09:21:57");
        System.out.println(accessor);
        //{MinuteOfHour=21, SecondOfMinute=57, NanoOfSecond=0, MicroOfSecond=0, HourOfAmPm=9, MilliOfSecond=0},ISO resolved to 2020-07-14
    }
}

其它API

在这里插入图片描述

Java比较器

概述

在这里插入图片描述

自然排序:java.lang.Comparable

简介

Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。

如何排序

1.实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大 于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。
2.实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
3.对于类 C 的每一个 e1 和 e2 来说,当且仅当e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。

Comparable 的典型实现:(默认都是从小到大排列的)

在这里插入图片描述

demo
package com.deserts.stringdemo01;

import java.util.Arrays;

public class CompareTest {
    
    
    public static void main(String[] args) {
    
    
        Goods[] g = new Goods[4];
        g[0] = new Goods(15, "卫龙");
        g[1] = new Goods(56, "三只松鼠");
        g[2] = new Goods(8, "百草味");
        g[3] = new Goods(23, "良品铺子");
        Arrays.sort(g);
        System.out.println(Arrays.toString(g));
    }
}
class Goods implements Comparable{
    
    
    private int price;
    private String name;

    public Goods() {
    
    
    }

    public Goods(int price, String name) {
    
    
        this.price = price;
        this.name = name;
    }


    @Override
    public int compareTo(Object o) {
    
    
        if(o instanceof Goods){
    
    
            Goods g = (Goods)o;
            if(this.price > g.price){
    
    
                return 1;
            }else if (this.price < g.price){
    
    
                return -1;
            }else {
    
    
                return 0;
            }
        }
        throw new RuntimeException("类型不一致");
    }

    @Override
    public String toString() {
    
    
        return "Goods{" +
                "price=" + price +
                ", name='" + name + '\'' +
                '}';
    }
}

运行结果

[Goods{price=8, name=‘百草味’}, Goods{price=15, name=‘卫龙’}, Goods{price=23, name=‘良品铺子’}, Goods{price=56, name=‘三只松鼠’}]

定制排序:java.util.Comparator

简单介绍

在这里插入图片描述

demo
package com.deserts.demo02;


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

class Goods1 {
    
    
    private int price;
    private String name;

    public int getPrice() {
    
    
        return price;
    }

    public String getName() {
    
    
        return name;
    }

    public Goods1() {
    
    
    }

    public Goods1(int price, String name) {
    
    
        this.price = price;
        this.name = name;
    }

    @Override
    public String toString() {
    
    
        return "Goods{" +
                "price=" + price +
                ", name='" + name + '\'' +
                '}';
    }


}
public class ComparatorTest {
    
    
    public static void main(String[] args) {
    
    
        Goods1[] arr = new Goods1[6];
        arr[0] = new Goods1(34,"lenovoMouse");
        arr[1] = new Goods1(43,"dellMouse");
        arr[2] = new Goods1(12,"xiaomiMouse");
        arr[3] = new Goods1(65,"huaweiMouse");
        arr[4] = new Goods1(224,"huaweiMouse");
        arr[5] = new Goods1(43,"microsoftMouse");

        Arrays.sort(arr, new Comparator() {
    
    
            //指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序
            @Override
            public int compare(Object o1, Object o2) {
    
    
                if(o1 instanceof Goods1 && o2 instanceof Goods1){
    
    
                    Goods1 g1 = (Goods1)o1;
                    Goods1 g2 = (Goods1)o2;
                    if(g1.getName().equals(g2.getName())){
    
    
                        return -Double.compare(g1.getPrice(),g2.getPrice());
                    }else{
    
    
                        return g1.getName().compareTo(g2.getName());
                    }
                }
                throw new RuntimeException("输入的数据类型不一致");
            }
        });

        System.out.println(Arrays.toString(arr));
    }

}


运行结果

[Goods{price=43, name=‘dellMouse’}, Goods{price=224, name=‘huaweiMouse’}, Goods{price=65, name=‘huaweiMouse’}, Goods{price=34, name=‘lenovoMouse’}, Goods{price=43, name=‘microsoftMouse’}, Goods{price=12, name=‘xiaomiMouse’}]

System类

在这里插入图片描述在这里插入图片描述

Math类

在这里插入图片描述

BigInteger与BigDecimal

在这里插入图片描述在这里插入图片描述在这里插入图片描述

demo

package com.deserts.demo02;

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

public class BIgNumDemo {
    
    
    public static void main(String[] args) {
    
    
        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));

    }
}

运行结果
在这里插入图片描述

写在最后

这几个类中比较重要的应该是JDK8.0的日期时间类和Java比较器,内容都比较多,多练多熟悉就完事了~

猜你喜欢

转载自blog.csdn.net/weixin_45834777/article/details/107328161