Java学习笔记19

Java笔记19

BigDecimal

  • 位置:java.math.BigDecimal
  • 作用:精确计算浮点数。
  • 创建方式:
BigDecimal bd = new BigDecimal("1.0");
  • 方法:
add(BigDecimal bd)  //加法运算
subtract(BigDecimal bd)  //减法运算
multiply(BigDecimal bd)  //乘法运算
divide(BigDecimal bd)  //除法运算
  • 补充说明 – 除法运算:
    • divide(BigDecimal divisor)有一个重载方法divide(BigDecimal divisor, int scale, int roundingMode)用来除法解决结果为无限循环小数这样的情况
    • 参数scale:指定精确到小数点后几位。
    • 参数roundingMode
      • 指定小数部分的取舍模式,通常采用四舍五入的模式,
      • 取值为BigDecimal.ROUND_HALF_UP
  • 练习:
package com.clown.classes.others;

import java.math.BigDecimal;

public class BigDecimalDemo01 {

    public static void main(String[] args) {

        System.out.println("================ Double ===============");

        //用Double类型的浮点数直接进行运算    不精确

        Double d1 = 1.0;
        Double d2 = 0.9;
        Double d3 = 1.4;
        Double d4 = 0.5;

        //例1:1.0-0.9 = ?
        System.out.println(d1-d2);  //0.09999999999999998

        //例2:(1.4-0.5)/0.9 = ?
        System.out.println((d3-d4)/d2);  //0.9999999999999999

        System.out.println("============== BigDecimal =============");

        //BigDecimal,大的浮点数精确计算
        BigDecimal bd1 = new BigDecimal("1.0");
        BigDecimal bd2 = new BigDecimal("0.9");
        BigDecimal bd3 = new BigDecimal("1.4");
        BigDecimal bd4 = new BigDecimal("0.5");
        BigDecimal bd5 = new BigDecimal("20");
        BigDecimal bd6 = new BigDecimal("3");

        //subtract();  减法运算
        BigDecimal r1 = bd1.subtract(bd2);  //1.0-0.9
        System.out.println(r1);  //0.1

        //add();  加法运算
        BigDecimal r2 = bd1.add(bd2);  //1.0+0.9
        System.out.println(r2);  //1.9

        //multiply();  乘法运算
        BigDecimal r3 = bd1.multiply(bd2);  //1.0*0.9
        System.out.println(r3);  //0.90

        //divide();  除法运算
        BigDecimal r4 = bd3.subtract(bd4).divide(bd2);  //(1.4-0.5)/0.9
        System.out.println(r4);  //1
        //divide(BigDecimal divisor, int scale, int roundingMode);  当结果为无限循环小数时使用  否则报错:ArithmeticException!!!
        //参数释义: int scale:指定精确到小数点后几位   int roundingMode:指定小数部分的取舍模式,通常采用四舍五入的模式:BigDecimal.ROUND_HALF_UP
        BigDecimal r5 = bd5.divide(bd6,2,BigDecimal.ROUND_HALF_UP);  //20/3  保留2位小数,末位四舍五入
        System.out.println(r5);  //6.67

    }

}

运行结果:

Java学习笔记19_第1张图片

Date

  • 位置:java.util.Date

  • Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。

  • 时间单位

    • 1秒 = 1000毫秒
    • 1毫秒 = 1000微秒
    • 1微秒 = 1000纳秒
  • 方法:

toString()  //将此 Date对象转换为字符串的形式
toLocaleString()  //将此 Date对象转换为在特定语言环境下的表示字符串   已过时
getTime()  //返回自1970年1月1日以来,到由此 Date对象表示的世界标准时间的毫秒数
after()  //判断此日期是否在指定日期之后
before()  //判断此日期是否在指定日期之前
compareTo()  //比较两个日期的顺序
equals()  //比较两个日期是否相等
  • 练习:
package com.clown.classes.others;

import java.util.Date;

public class DateDemo01 {

    public static void main(String[] args) {

        //创建 Date对象
        //今天
        Date date1 = new Date();
        //toString();  将此 Date对象转换为字符串的形式
        System.out.println(date1.toString());  //Tue Jul 25 22:29:12 CST 2023
        //toLocaleString();  将此 Date对象转换为在特定语言环境下的表示字符串   已过时的方法
        System.out.println(date1.toLocaleString());  //2023-7-25 22:29:12

        //昨天
        //getTime();  返回自1970年1月1日以来,到由此 Date对象表示的世界标准时间的毫秒数    1970:UNIX元年
        Date date2 = new Date(date1.getTime()-(24*60*60*1000));  //一天的毫秒数:24*60*60*1000
        System.out.println(date2.toLocaleString());  //2023-7-24 22:29:12

        //方法:

        //after() && before();  判断时间前后
        //after();  判断此日期是否在指定日期之后
        boolean b1 = date1.after(date2);
        System.out.println(b1);  //true
        //before();  判断此日期是否在指定日期之前
        boolean b2 = date1.before(date2);
        System.out.println(b2);  //false

        //compareTo();  比较两个日期的顺序   如果对象 Date等于此参数日期,则值为 0;如果对象 Date在此参数日期之前,则该值小于 0;如果对象 Date在此参数日期之后,则值大于0
        int d1 = date1.compareTo(date2);
        System.out.println(d1);  //1

        int d2 = date2.compareTo(date1);
        System.out.println(d2);  //-1

        //equals();  比较两个日期是否相等
        boolean b3 = date1.equals(date2);
        System.out.println(b3);  //false

    }

}

运行结果:

Java学习笔记19_第2张图片

Calendar

  • 位置:java.util.Calendar
  • Calendar类提供了获取或设置各种日历字段的方法。
  • 构造方法:
protected Calendar ()
  • 由于修饰符是protected,所以无法直接创建该对象。

  • 方法:

static Calendar getInstance()  //使用默认时区和区域设置获取日历
void set(int year, int month, int date, int hourofday, int minute, int second)  //设置日历的年、月、日、时、分、秒
int get(int field)  //返回给定日历字段的值。字段比如年、月、日等
void setTime(Date date)  //用给定的Date设置此日历的时间。  Date --> Calendar
Date getTime()  //返回一个Date表示此对象Calendar的时间值。  Calendar --> Date
void add(int field, int amount)  //按照日历的规则,将指定的时间量添加或减去给指定的日历字段
long getTimeInMillis()  //以毫秒为单位返回该日历的时间值
int getActualMaximum(int field)  //返回指定日历字段能取到的最大值
int getActualMinimum(int field)  //返回指定日历字段能取到的最小值
  • 练习:
package com.clown.classes.others;

import java.util.Calendar;

public class CalendarDemo01 {

    public static void main(String[] args) {

        //1. 创建Calendar对象   protected   不能使用new直接创建
        //getInstance();  //使用默认时区和区域设置获取日历
        Calendar calendar1 = Calendar.getInstance();
        Calendar calendar2 = Calendar.getInstance();

        //getTime();  返回一个Date表示此对象Calendar的时间值。
        System.out.println(calendar1.getTime().toLocaleString());
        //getTimeInMillis();  以毫秒为单位返回该日历的时间值   从1970年1月1日开始
        System.out.println(calendar1.getTimeInMillis());

        //2. 获取时间信息
        //int get(int field);  返回给定日历字段的值。字段比如年、月、日等
        //get(Calendar.YEAR);  获取年
        int year = calendar1.get(Calendar.YEAR);
        //get(Calendar.MONTH);  获取月  0-11
        int month = calendar1.get(Calendar.MONTH);
        //get(Calendar.DAY_OF_MONTH);  获取日
        int day = calendar1.get(Calendar.DAY_OF_MONTH);  //DATE
        //get(Calendar.HOUR_OF_DAY);  获取时
        int hour = calendar1.get(Calendar.HOUR_OF_DAY);  //HOUR:12小时制   HOUR_OF_DAY:24小时制
        //get(Calendar.MINUTE);  获取分
        int minute = calendar1.get(Calendar.MINUTE);
        //get(Calendar.SECOND);  获取秒
        int second = calendar1.get(Calendar.SECOND);

        //打印时间信息
        System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);  //月是 0-11,所以要 +1

        //3. 修改时间
        //用set()方法修改
        //set(int field, int value);  //设置日历的年、月、日、时、分、秒
        calendar2.set(Calendar.DAY_OF_MONTH, 25);  //将日修改为 25
        //打印修改后的日期
        System.out.println(calendar2.getTime().toLocaleString());

        //用add()方法修改
        //add(int field, int amount);  按照日历的规则,将指定的时间量添加或减去给指定的日历字段
        calendar2.add(Calendar.HOUR_OF_DAY, -1);  //将小时数 -1
        //打印修改后的日期
        System.out.println(calendar2.getTime().toLocaleString());

        //4. 补充方法
        //getActualMaximum(int field);  返回指定日历字段能取到的最大值
        System.out.println(calendar2.getActualMaximum(Calendar.DAY_OF_MONTH));
        //getActualMinimum(int field);  返回指定日历字段能取到的最小值
        System.out.println(calendar2.getActualMinimum(Calendar.DAY_OF_MONTH));

    }

}

运行结果:

Java学习笔记19_第3张图片

SimpleDateFormat

  • 位置:java.text.SimpleDateFormat
  • SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。
  • 进行格式化(日期 --> 文本)、解析(文本 --> 日期)。
  • 常用的时间模式字母:
字母 日期或时间 示例
y 2023
M 年中月份 07
d 月中天数 26
H 1天中小时数(0-23) 17
m 分钟 28
s 53
S 毫秒 387
  • 练习:
package com.clown.classes.others;

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

public class SimpleDateFormatDemo01 {

    public static void main(String[] args) throws Exception {

        //创建SimpleDateFormat对象   年:y, 月:M,  日:d,  时:H,  分:m,  秒:s
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");

        //创建Date对象
        Date date = new Date();

        //format(Date date);  将给定的Date成日期/时间字符串  格式化date  (把日期转为字符串)
        String str = sdf1.format(date);

        //输出格式化之后的时间
        System.out.println(str);

        //parse(String source) throws ParseException;  从字符串中解析文本以产生一个Date   (把字符串转为时间)
        Date date2 = sdf2.parse("1990/05/01");
        //输出解析之后的时间
        System.out.println(date2);

    }

}
  • 运行结果:

Java学习笔记19_第4张图片

你可能感兴趣的:(Java,SE,学习笔记合集,java,学习,笔记)