日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

常用類之BigDecimal、Date、Calender、SimpleDateFormat及System類

作者:草原灰太狼666 更新時間: 2022-07-13 編程語言

常用類

1.BigDecimal類

  • 引言: 很多實際應用中需要精確運算,而double是近似值存儲,不在符合要求,需要借助BIgDecimal。

  • BigDecimal

    • 位置:java.math包中
    • 作用:精確計算浮點數
    • 基本類型存儲在棧中,引用類型存儲在堆中
    • 創建方式:BigDecimal bd=new BigDecimal("1.0");
  • 方法:
    BigDecimal add(BigDecimal db);//加
    BigDecimal subtract(BigDecimal db);//減
    BigDecimal multiply(BigDecimal db);//乘
    BigDecimal divide(BigDecimal db);//除

  • 除法:divide(BigDecimal bd,int scal,RoundingMode mode)

    • 參數scal:指定精確到小數點后幾位。
    • 參數mode:指定小數部分的取舍模式,通常采用四舍五入的模式,取值為BigDecimal.ROUND_HALF_UP。

1.1 BigDecimal代碼演示

package classes.demo08;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class TestBigDecimal {
    public static void main(String[] args) {
        double d1=1.0;//double 是近似值存儲
        double d2=0.9;
        System.out.println(d1-d2);//輸出0.09999999999999998

        //面式題
        double result=(1.4-0.5)/0.9;
        System.out.println(result);//輸出0.9999999999999999

        //BigDecimal,大的浮點數精確計算
        BigDecimal bd1 = new BigDecimal("1.0");
        BigDecimal bd2 = new BigDecimal("0.9");
        //加法
        BigDecimal r1 = bd1.add(bd2);
        System.out.println(r1);
        //減法
        BigDecimal r2 = bd1.subtract(bd2);
        System.out.println(r2);
        //乘法
        BigDecimal r3 = bd1.multiply(bd2);
        System.out.println(r3);

        //先減再除法
        BigDecimal r5 = new BigDecimal("1.4").
                subtract(new BigDecimal("0.5")).
                divide(new BigDecimal("0.9"));//除法
        System.out.println(r5);

        //除法時除不盡會報錯,要用重載的選擇保留幾位小數的divide()方法
        //四舍五入的取法BigDecimal.ROUND_HALF_UP

        //除不盡的情況,保留小數位              //RoundingMode.HALF_UP:4舍5入法
        //BigDecimal r6 = new BigDecimal("10").divide(new BigDecimal("3"),5,BigDecimal.ROUND_HALF_UP);
        BigDecimal result1 = new BigDecimal("20").divide(new BigDecimal("3"),3,BigDecimal.ROUND_HALF_UP); // 10 除以 3,保留 5 位小數,采用四舍五入
        System.out.println(result1);



    }
}



運行結果

0.09999999999999998
0.9999999999999999
1.9
0.1
0.90
1
6.667


2.Date類

  • Date表示特定的瞬間,精確到毫秒。Date類中的大部分方法都已經被Calendar類中的方法所取代。

  • 時間單位

    • 1秒=1000毫秒
    • 1毫秒=1000微秒
    • 1微秒=1000納秒

2.1 Date類使用代碼演示

package classes.demo08;

import java.util.Date;
/*
在程序開發中,經常需要處理日期和時間的相關數據,此時我們可以使用 java.util 包中的
Date 類。這個類最主要的作用就是獲取當前時間,我們來看下 Date 類的使用:
使用 Date 類的默認無參構造方法創建出的對象就代表當前時間,我們可以直接輸出 Date 對象顯示當前的時間
其中, Wed 代表 Wednesday (星期三), Jun 代表 June (六月), 11 代表 11 號, CST 代表 China Standard Time (中國標準時間,也就是北京時間,東八區)。

從上面的輸出結果中,我們發現,默認的時間格式不是很友好,與我們日常看到的日期格式不太一樣,如果想要按指定的格式進行顯示,如 2014-06-11 09:22:30 ,那該怎么做呢?
此時就到了 java.text 包中的 SimpleDateFormat 類大顯身手的時候了!!可以使用 SimpleDateFormat
來對日期時間進行格式化,如可以將日期轉換為指定格式的文本,也可將文本轉換為日期。

具體參考博客:https://blog.csdn.net/silent0001/article/details/100149282?spm=1001.2014.3001.5502
* */
public class TestDate {
    public static void main(String[] args) {
        //1 創建Date對象
        Date date = new Date();
        //今天
        //d1.toString() 以字符串的形式打印

        //使用 Date 類的默認無參構造方法創建出的對象就代表當前時間,我們可以直接輸出 Date 對象顯示當前的時間
        System.out.println(date.toString());//Fri Jul 01 14:18:52 CST 2022
        System.out.println(date.toLocaleString());//2022-7-1 14:18:52


        //昨天
        Date d1=new Date(date.getTime()-60*60*24*1000);
        System.out.println(d1.toLocaleString());
        //2 方法 after before  (返回的是Boolean類型)
        boolean result = date.after(d1);//今天是否在昨天之后  true
        System.out.println(result);

        boolean beforeresult = date.before(d1);
        System.out.println(beforeresult);//false

        //比較compareTo()  比較(比的是毫秒值)(返回的為int)
        System.out.println(date.compareTo(d1));
        //equals()  判斷是否相等,返回Boolean類型
        System.out.println(date.equals(d1));


    }
}



運行結果

Fri Jul 01 19:01:04 CST 2022
2022-7-1 19:01:04
2022-6-30 19:01:04
true
false
1
false

3.Calendar類

  • 引言: Date 類最主要的作用就是獲得當前時間,同時這個類里面也具有設置時間以及一些其他的功能,但是由于本身設計的問題,這些方法卻遭到眾多批評,不建議使用,更推薦使用 Calendar 類進行時間和日期的處理

    • java.util.Calendar 類是一個抽象類,可以通過調用 getInstance() 靜態方法獲取一個 Calendar 對象,此對象已由當前日期時間初始化,即默認代表當前時間
  • Calendar

    • Calendar提供了獲取或設置各種日歷字段的方法。
    • 構造方法:protected Calendar()由于修飾符是protected,所以無法直接創建該對象
  • 方法


? ? ?? 方法名?? ? ?? ?? ? ? 說明? ???
static Calendar() 設置默認時區和區域獲取日歷
void set(int year, int mouth, int date, int hourofday, int minute, int second) 設置日歷的年月日時分秒
int get(int field) 返回給定日歷字段的值,字段比如年月日等
void setTime(Date date) 用給定的Date設置此日歷的時間
Date getTime() 返回一個Date表示日歷的時間
void add(int field, int amount) 按照日立的規則,給指定字段添加或減少時間量
long getTimeInMillies() 毫秒為單位返回該日歷的時間值

3.1 Calendar 類方法使用代碼演示

package classes.demo08;

import java.util.Calendar;

public class TestCalender {
    public static void main(String[] args) {
        //1 創建Calendar對象   Protected Calendar() 由于修飾符是protected,所以無法之間創建對象。  但是可以通過getInstance()方法
        Calendar instance = Calendar.getInstance();

        System.out.println(instance.toString());//和date還不一樣,并不是我們需要的信息

        System.out.println(instance.getTimeInMillis());
        //打印時間,要使用getTime()方法
        System.out.println(instance.getTime().toLocaleString());
        //2 獲取時間信息

        //獲取年
        int year = instance.get(instance.YEAR);
        //獲取月
        int month = instance.get(instance.MONTH);
        //獲取日
        int day = instance.get(instance.DAY_OF_MONTH);
        //獲取小時
        int hour = instance.get(instance.HOUR_OF_DAY);
        //獲取分鐘
        int minute = instance.get(instance.MINUTE);
        //獲取秒
        int second = instance.get(instance.SECOND);

        //輸出(注意月要加一)  因為外國是0-11個月
        System.out.println(year+"年"+(month+1)+"月"+day+"日"+"  "+hour+"時"+minute+"分"+second+"秒");

        //3 修改時間
        //先創建一個時間
        Calendar calendar = Calendar.getInstance();
        //調用set方法
        calendar.set(calendar.HOUR_OF_DAY,1);//小時變為1
        System.out.println(calendar.getTime().toLocaleString());

        //用add方法修改時間
        calendar.add(calendar.MONTH,-1);//相當于把小時減一
        System.out.println(calendar.getTime().toLocaleString());
        // 補充方法   判斷月有多少天
        int actualMaximum = calendar.getActualMaximum(calendar.DAY_OF_MONTH);//最多天數
        int actualMinimum = calendar.getActualMinimum(calendar.DAY_OF_MONTH);
        System.out.println(actualMaximum);
        System.out.println(actualMinimum);


    }
}



運行結果

java.util.GregorianCalendar[time=1656674064029,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=6,WEEK_OF_YEAR=27,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=182,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=14,SECOND=24,MILLISECOND=29,ZONE_OFFSET=28800000,DST_OFFSET=0]
1656674064029
2022-7-1 19:14:24
2022年7月1日  19時14分24秒
2022-7-1 1:14:24
2022-6-1 1:14:24
30
1

4.SimpleDateFormat類

  • SimpleDateFormat是一個以與語言環境有關的方式來格式化和解析日期的具體類
  • 進行格式化(日期→文本)、解析(文本→日期)
  • 常用的時間模式字母

? ? ? 字母?? ? ?? ? 日期或時間? ? ?? ? ? 示例? ???
y 2019
M 年中月份 08
d 月中天數 10
H 一天中小時(0-23) 22
m 分鐘 16
s 59
S 毫秒 356


4.1 SimpleDateFormat類常用方法代碼演示:

package classes.demo08;

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

public class TestSimpleDateFormat {
    public static void main(String[] args) throws ParseException {
        //1 創建SimpleDATeFormat對象 y年 M月
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

        //2 創建Date  獲取時間
        Date date = new Date();
        //調用format()方法  格式化date(把日期轉成字符串)
        String format = simpleDateFormat.format(date);
        System.out.println(format);

        //調用parse()方法  解析(把字符串轉為日期)(字符-->日期)

        // 使用時需要和前后日期格式一致
        Date parse = simpleDateFormat.parse("2022/07/01");//需拋出異常
        System.out.println(parse);

    }
}


運行結果

2022/07/01
Fri Jul 01 00:00:00 CST 2022

5.System類

  • 主要用于獲取系統的屬性數據和其他操作,構造方法私有的
  • 方法

? ? ?? 方法名?? ? ?? ?? ? ? 說明? ???
static void arraycopy(…) 復制數組
static long currentTimeMillis(); 獲取當前系統時間,返回毫秒值
static void gc(); 建議jvm趕快啟動垃圾回收期器回收垃圾
static void exit(int status); 退出jvm 如果參數是0表示正常退出jvm;非0表示異常退出

5.1 System類方法代碼演示:

package classes.demo08;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

    @Override
    protected void finalize() throws Throwable {
        System.out.println(name+"被回收了");
    }
}


package classes.demo08;

public class TestSystem {
    public static void main(String[] args) {

        //1 arraycopy(),數據復制
       int[] arry={15,35,52,45,78,90,56};
       int[] ints=new int[7];

        //System.arraycopy(src,srcPos,dest,destPos,length);
        //src:源數組
        //srcPos:從哪個位置開始復制
        //dest:目標數組
        //destPos:目標數組的位置
        //length:復制的長度

       System.arraycopy(arry,3,ints,0,3);
        for (int anInt : ints) {
            System.out.println(anInt);
        }


        //2 currentTimeMillis(),獲取時間
        System.out.println(System.currentTimeMillis());

        long star = System.currentTimeMillis();
        int result=0;
        for (int i = -99999; i < 99999; i++) {
            for (int i1 = -999999; i1 < 99999; i1++) {
                result=i+i1;
            }

        }
        //計時   currentTimeMillis()方法主要用于計代碼時間
        long end = System.currentTimeMillis();
        System.out.println("用時:"+(end-star));

        //3 gc(),垃圾回收
        //匿名使用后,會自動回收
        Student st1 = new Student("小米", 19);
        Student st2 = new Student("小明", 20);
        new Student("xiaoxiao",18);
        new Student("xiaobai",21);

        System.gc();// 垃圾回收,在另一個類中重寫 finalize() 方法,顯示是否回收,當沒有對象引用可能就會被回收

        //4 exit(0),退出

        System.exit(0);//退出JVM
        System.out.println("執行結束");//不會被執行



    }
}


運行結果

45
78
90
0
0
0
0
1656676265134
用時:6
xiaobai被回收了
xiaoxiao被回收了


3.更多參考

千峰教育-常用類

原文鏈接:https://blog.csdn.net/qq_60501861/article/details/125564882

欄目分類
最近更新