2021-09-10 Math&Date&Calendar类

一、java.lang.Math

java.lang.Math底层封装了很多与数学相关的属性和方法,使用它可以在一定基础上避免程序员自行研发数学方面的代码。


1、Math的两个属性:

①圆周率PI ② 科学计数法E
都是静态常量,可以直接用Math.调用。

2、Math的方法:

1、 Math.abs() :绝对值
2、 Math.max() :最大值
      Math.min() :最小值
3、 Math.random() :随机数
4、 Math.ceil() :向上取整
      Math.floor() :向下取整
5、 [long] round()四舍五入
6、 [double] pow(double a,double b) 求a的b次幂
7、 [double] sqrt(double a)开平方
8、 [double] cbrt(double a)开立方

3、BigDecimal:

为了解决浮点型在计算过程中产生精度丢失问题而使用的类。


BigDecimal构造方法有重载:

1、当( )内为double类型数据时:
即、BigDecimal b = new BigDecimal(double类型);
计算结果会更加不精确= =!

2、当( )内为String类型数据时:
即、BigDecimal b = new BigDecimal(String类型);
计算结果会很精确。
可以通过拼接空字符串""+ 或 String.valueOf实现double到String的转换。


BigDecimal的运算方法:

加法:add()
减法:subtract()
乘法:multiply()
除法:divide(),当除不尽时会抛出算术异常ArithmeticException。
            解决方案:使用重载的divide()方法。
            第一个参数是除数,第二个参数是保留的小数位数,第三个参数是舍入模式。

二、java.util.Date:

需要创建对象的引用 Date date = new Date();
直接输出date : 获取默认系统时间 格林威治时间


1、date.调用常用方法:

1、getTime() 获取1970-1-1零点到现在的毫秒值


2、date.调用过时方法:

1、getYear() 获取年份 获取1900年到现在的年份
2、getMonth() 获取月份 获取自然月-1
3、getDate() 获取日期
4、getDay() 获取星期几
5、getHours() 获取小时
6、getMinutes() 获取分钟
7、getSeconds() 获取秒钟
8、toLocaleString() 换成格式:年月日时分秒

需要注意的是:在Date和Calendar类中的month/MONTH 显示的是对应月份的下标(即从0开始,0-11),在调用或输出时根据情况±1。


3、SimpleDateFormat:

两种数据格式的相互转换:String ←→ Date:

创建SimpleDateFormat对象,传递参数为日期的格式。(y年,M月,d日,H时,m分,s秒 -和:是分隔符,判断不符合格式会抛出异常。)

 [Date] parse(String str)将字符串解析成Date类型
 [String] format(Date date)将Date类型转化为字符串

练习:接收用户输入的日期,计算距离现在有多少天

    //练习:接收用户输入的日期,计算距离现在有多少天
    public static void method2(String str) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date datein = sdf.parse(str);
        System.out.println("获取到的生日是:"+sdf.format(datein));
        long secondin = datein.getTime();
        System.out.println("出生时的毫秒值:"+secondin);
        Date datenow = new Date();
        long nowsecond = datenow.getTime();
        System.out.println("当前维度毫秒值:"+nowsecond);
        long days = (nowsecond-secondin)/24/60/60/1000;
        System.out.println("存活在世的天数:"+days);

    }


三、java.util.Calendar日历类

Calendar类出现于Date类之后,替换掉了许多Date方法,该类将所有可能用到使用到的时间信息都封装为静态成员变量,方便使用。

1、Calendar类创建对象

Calendar类是一个抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar的子类对象,该子类对象是根据当前默认时区和语言环境所获取的。我们国家使用的是java.util.GregorianCalendar阳历。

直接使用类名或对象名调用,获取到的是Calendar类中定义好的静态常量的值,需要使用对象调用get()方法才能获取到该对象所表示的日历中对应的属性值。

        Calendar c = Calendar.getInstance();
        System.out.println(c);
        /*输出内容是:
        [time=1631265613352,areFieldsSet=true,areAllFieldsSet=true,
        lenient=true,zone=sun.util.calendar.ZoneInfo
        [id="Asia/Shanghai",offset=28800000,dstSavings=0,
        useDaylight=false,transitions=29,lastRule=null],
        firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
        YEAR=2021,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,
        DAY_OF_MONTH=10,DAY_OF_YEAR=253,DAY_OF_WEEK=6,
        DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,
        MINUTE=20,SECOND=13,MILLISECOND=352,ZONE_OFFSET=28800000,DST_OFFSET=0]
         */

2、Calendar类的方法:

1、[int] get(int field) 返回给定义日历字段的值
2、[void] set(int fields,int value) 将指定字段修改为指定字段的值
3、set方法的重载,可以一次性设置多个属性值
4、[void] add(int field,int amount)将给定字段增加或减少指定的值,具体增还是减由第二个参数amount的±决定

上一篇:7.常用API


下一篇:三代日期类日期类,Date,Calendar_听韩顺平课笔记