day18_常用類(時間相關的類丶數字類)
System類
- System類提供的public static long currentTimeMillis()用來返回當前時 間與1970年1月1日0時0分0秒之間以毫秒為單位的時間差。
/*
獲取自1970年1月1日 00:00:00 000到當前系統時間的總毫秒數。
1秒 = 1000毫秒
簡單總結一下System類的相關屬性和方法:
System.out 【out是System類的靜態變數。】
System.out.println() 【println()方法不是System類的,是PrintStream類的方法。】
System.gc() 建議啟動垃圾回收器
System.currentTimeMillis() 獲取自1970年1月1日到系統當前時間的總毫秒數。
System.exit(0) 退出JVM。
*/
public class DateTest02 {
public static void main(String[] args) {
// 獲取自1970年1月1日 00:00:00 000到當前系統時間的總毫秒數。
long nowTimeMillis = System.currentTimeMillis();
System.out.println(nowTimeMillis); //1583377912981
// 統計一個方法耗時
// 在呼叫目標方法之前記錄一個毫秒數
long begin = System.currentTimeMillis();
print();
// 在執行完目標方法之後記錄一個毫秒數
long end = System.currentTimeMillis();
System.out.println("耗費時長"+(end - begin)+"毫秒");
}
// 需求:統計一個方法執行所耗費的時長
public static void print(){
for(int i = 0; i < 1000000000; i++){
System.out.println("i = " + i);
}
}
}
java.util.Date類
java.util.Date 類 表示特定的瞬間,精確到毫秒。其常用的子類有java.sql.Date類。繼續查閱Date類的描述,發現Date擁有多個建構函式,只是部分已經過時,但是其中有未過時的建構函式可以把毫秒值轉成日期物件。
- public Date() :分配Date物件並初始化此物件,以表示分配它的時間(精確到毫秒)。
- public Date(long date) :分配Date物件並初始化此物件,以表示自從標準基準時間(稱為“曆元(epoch)”,即1970年1月1日00:00:00 GMT)以來的指定毫秒數。 由於我們處於東八區,所以我們的基準時間為1970年1月1日8時0分0秒。
簡單來說:使用無參構造,可以自動獲取當前系統時間的毫秒時刻;指定long型別的構造引數,可以自定義毫秒時刻。例如
package DateTest;
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 建立日期物件, 獲取系統當前時間(精確到毫秒的系統當前時間)
System.out.println(new Date()); //Sat Dec 05 09:47:36 CST 2020
// 建立日期物件,把當前的毫秒值轉成日期物件
System.out.println(new Date(0L)); //Thu Jan 01 08:00:00 CST 1970
}
}
在使用println方法時,會自動呼叫Date類中的toString方法。Date類對Object類中的toString方法進行了覆蓋重寫,所以結果為指定格式的字串。
常用的方法有:
Date類中的多數方法已經過時,我們需要記住的方法
- public long getTime() 把日期物件轉換成對應的時間毫秒值。
/*
java.util.Date類
|---java.sql.Date類
1.兩個構造器的使用
>構造器一:Date():建立一個對應當前時間的Date物件
>構造器二:建立指定毫秒數的Date物件
2.兩個方法的使用
>toString():顯示當前的年、月、日、時、分、秒
>getTime():獲取當前Date物件對應的毫秒數。(時間戳)
3. java.sql.Date對應著資料庫中的日期型別的變數
>如何例項化
>如何將java.util.Date物件轉換為java.sql.Date物件
*/
@Test
public void test2(){
//構造器一:Date():建立一個對應當前時間的Date物件
Date date1 = new Date();
System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019
System.out.println(date1.getTime());//1550306204104
//構造器二:建立指定毫秒數的Date物件
Date date2 = new Date(155030620410L);
System.out.println(date2.toString());
//建立java.sql.Date物件
java.sql.Date date3 = new java.sql.Date(35235325345L);
System.out.println(date3);//1971-02-13
//如何將java.util.Date物件轉換為java.sql.Date物件
//情況一:
// Date date4 = new java.sql.Date(2343243242323L);
// java.sql.Date date5 = (java.sql.Date) date4;
//情況二:
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());
}
DateFormat類
java.text.DateFormat 是日期/時間格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文字之間的轉換,也就是可以在Date物件與String物件之間進行來回轉換。
- 格式化:按照指定的格式,從Date物件轉換為String物件。
- 解析:按照指定的格式,從String物件轉換為Date物件。
構造方法
由於DateFormat為抽象類,不能直接使用,所以需要常用的子類 java.text.SimpleDateFormat 。這個類需要一個模式(格式)來指定格式化或解析的標準。構造方法為:
- public SimpleDateFormat(String pattern) :用給定的模式和預設語言環境的日期格式符號構造SimpleDateFormat。
引數pattern是一個字串,代表日期時間的自定義格式。格式規則 如下圖所示
建立SimpleDateFormat物件的程式碼如:
package DateTest;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Demo02SimpleDateFormat {
public static void main(String[] args) {
// 對應的日期格式如:2018‐01‐16 15:06:38
DateFormat format = new SimpleDateFormat("yyyy‐MM‐dd HH:mm:ss");
System.out.println(format);//java.text.SimpleDateFormat@e4702c80
}
}
DateFormat類的常用方法有:
- public String format(Date date) :將Date物件格式化為字串。
- public Date parse(String source) :將字串解析為Date物件。
package DateTest;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo02SimpleDateFormat {
public static void main(String[] args) throws ParseException {
Date d1 = new Date();
// 建立日期格式化物件,在獲取格式化物件時可以指定風格
// 注意:在日期格式中,除了y M d H m s S這些字元不能隨便寫之外,剩下的符號格式自己隨意組織。
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
// Date ---> String
String s1 = df.format(d1);
System.out.println(s1); // 2020年12月05日
// 注意:字串的日期格式和SimpleDateFormat物件指定的日期格式要一致。不然會出現異常:java.text.ParseException
String s2 = "2018年12月11日";
// String --> Date
Date d2 = df.parse(s2);
System.out.println(d2); // Tue Dec 11 00:00:00 CST 2018
}
}
Calendar類
java.util.Calendar 是日曆類,在Date後出現,替換掉了許多Date的方法。該類將所有可能用到的時間資訊封裝為靜態成員變數,方便獲取。日曆類就是方便獲取各個時間屬性的。
獲取方式
Calendar為抽象類,由於語言敏感性,Calendar類在建立物件時並非直接建立,而是通過靜態方法建立,返回子類物件,如下:Calendar靜態方法
- public static Calendar getInstance() :使用預設時區和語言環境獲得一個日曆
Calendar cal = Calendar.getInstance();
常用方法
根據Calendar類的API文件,常用方法有:
- public int get(int field) :返回給定日曆欄位的值。
- public void set(int field, int value) :將給定的日曆欄位設定為給定值。
- public abstract void add(int field, int amount) :根據日曆的規則,為給定的日曆欄位新增或減去指定的時間量。
- public Date getTime() :返回一個表示此Calendar時間值(從曆元到現在的毫秒偏移量)的Date物件。
Calendar類中提供很多成員常量,代表給定的日曆欄位:
get方法用來獲取指定欄位的值,set方法用來設定指定欄位的值,程式碼使用演示:
package DateTest;
import java.util.Calendar;
public class CalendarUtil {
public static void main(String[] args) {
// 建立Calendar物件
Calendar cal = Calendar.getInstance();
// 設定年
int year = cal.get(Calendar.YEAR);
// 設定月
int month = cal.get(Calendar.MONTH) + 1;
// 設定日
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.print(year + "年" + month + "月" + dayOfMonth + "日");//2020年12月5日
}
}
add方法可以對指定日曆欄位的值進行加減操作,如果第二個引數為正數則加上偏移量,如果為負數則減去偏移量。程式碼如:
package DateTest;
import java.util.Calendar;
public class CalendarUtil {
public static void main(String[] args) {
// 建立Calendar物件
Calendar cal = Calendar.getInstance();
// 使用add方法
cal.add(Calendar.DAY_OF_MONTH, 2);// 加2天
cal.add(Calendar.YEAR, -3);// 減3年
// 設定年
int year = cal.get(Calendar.YEAR);
// 設定月
int month = cal.get(Calendar.MONTH) + 1;
// 設定日
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2017年12月7日
}
}
Calendar中的getTime方法並不是獲取毫秒時刻,而是拿到對應的Date物件。
package DateTest;
import java.util.Calendar;
import java.util.Date;
public class CalendarUtil {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
System.out.println(date); // Sat Dec 05 10:59:38 CST 2020
}
}
DecimalFormat類
DecimalFormat
是NumberFormat
十進位制數字格式的具體子類 。它具有多種功能,旨在解析和格式化任何語言環境中的數字,包括支援西方,阿拉伯語和印度語數字。它還支援不同型別的數字,包括整數(123),定點數(123.4),科學記數法(1.23E4),百分比(12%)和貨幣金額(123美元)。而且對於數值的小數部分,預設顯示3位小數,在去掉超出小數點後面3位的部分時,會將數值四捨五入為最接近的數值格式化輸出。
import java.text.DecimalFormat;
/*
關於數字的格式化。
*/
public class DecimalFormatTest01 {
public static void main(String[] args) {
// java.text.DecimalFormat專門負責數字格式化的。
//DecimalFormat df = new DecimalFormat("數字格式");
/*
數字格式有哪些?
# 代表任意數字
, 代表千分位
. 代表小數點
0 代表不夠時補0
###,###.##
表示:加入千分位,保留2個小數。
*/
DecimalFormat df = new DecimalFormat("###,###.##");
//String s = df.format(1234.56);
String s = df.format(1234.561232);
System.out.println(s); // "1,234.56"
DecimalFormat df2 = new DecimalFormat("###,###.0000"); //保留4個小數位,不夠補上0
String s2 = df2.format(1234.56);
System.out.println(s2); // "1,234.5600"
}
}
BigDecimal類
- Java中提供了大數字(超過16位有效位)的操作類,即 java.math.BinInteger 類和 java.math.BigDecimal 類,用於高精度計算.
- 其中 BigInteger 類是針對大整數的處理類,而 BigDecimal 類則是針對大小數的處理類.
- BigDecimal 類的實現用到了 BigInteger類,不同的是 BigDecimal 加入了小數的概念.
- float和Double只能用來做科學計算或者是工程計算;在商業計算中,對數字精度要求較高,必須使用 BigInteger 類和 BigDecimal 類,它支援任何精度的定點數,可以用它來精確計算貨幣值.
- BigDecimal類建立的是物件,不能使用傳統的+、-、*、/等算術運算子直接對其進行數學運算,而必須呼叫其對應的方法.方法的引數也必須是BigDecimal型別的物件.
import java.math.BigDecimal;
/*
1、BigDecimal 屬於大資料,精度極高。不屬於基本資料型別,屬於java物件(引用資料型別)
這是SUN提供的一個類。專門用在財務軟體當中。
2、注意:財務軟體中double是不夠的。我們們之前有一個學生去用友面試,經理就問了這樣一個問題:
你處理過財務資料嗎?用的哪一種型別?
千萬別說double,說java.math.BigDecimal
*/
public class BigDecimalTest01 {
public static void main(String[] args) {
// 這個100不是普通的100,是精度極高的100
BigDecimal v1 = new BigDecimal(100);
// 精度極高的200
BigDecimal v2 = new BigDecimal(200);
// 求和
// v1 + v2; // 這樣不行,v1和v2都是引用,不能直接使用+求和。
BigDecimal v3 = v1.add(v2); // 呼叫方法求和。
System.out.println(v3); //300
BigDecimal v4 = v2.divide(v1);
System.out.println(v4); // 2
}
}
Random類
- 此類的例項用於生成偽隨機數。
成員方法
- public int nextInt(int n) :返回一個偽隨機數,範圍在 0 (包括)和 指定值 n (不包括)之間的int 值。
package com.bjpowernode.javase.random;
import java.util.Arrays;
import java.util.Random;
/*
編寫程式,生成5個不重複的隨機數[0-100]。重複的話重新生成。
最終生成的5個隨機數放到陣列中,要求陣列中這5個隨機數不重複。
*/
public class RandomTest02 {
public static void main(String[] args) {
// 建立Random物件
Random random = new Random();
// 準備一個長度為5的一維陣列。
int[] arr = new int[5]; // 預設值都是0
for(int i = 0; i < arr.length; i++){
arr[i] = -1;
}
// 迴圈,生成隨機數
int index = 0;
while(index < arr.length){
// 生成隨機數
//int num = random.nextInt(101);
//int num = random.nextInt(6); // 只能生成[0-5]的隨機數!
int num = random.nextInt(4); // 只能生成[0-3]的隨機數!永遠都有重複的,永遠都湊不夠5個。
System.out.println("生成的隨機數:" + num);
// 判斷arr陣列中有沒有這個num
// 如果沒有這個num,就放進去。
if(!contains(arr, num)){
arr[index++] = num;
}
}
// 遍歷以上的陣列
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
/**
* 單獨編寫一個方法,這個方法專門用來判斷陣列中是否包含某個元素
* @param arr 陣列
* @param key 元素
* @return true表示包含,false表示不包含。
*/
public static boolean contains(int[] arr, int key){
for(int i = 0; i < arr.length; i++){
if(arr[i] == key){
// 條件成立了表示包含,返回true
return true;
}
}
// 這個就表示不包含!
return false;
}
}
相關文章
- 時間相關的工具類
- 與數學相關的類
- 類與類之間的基本關係
- UML類圖--類之間的關係
- Java常用時間格式轉換工具類Java
- 介面、抽象類、普通類之間的關係抽象
- StringBuilder類相關操作UI
- 日期時間類
- Java 中節省 90% 時間的常用的工具類Java
- JAVA常用類--Cleaner類Java
- JAVA常用類--Runtime類Java
- Java常用類-Object類JavaObject
- 各類關鍵字
- java時間工具類Java
- LocalDate類操作時間LDA
- Java 中JDK7時間類與JDK8中的時間類JavaJDK
- 【java】類之間的關係Java
- 常用類
- 關於 Date 函式獲取各類時間/日期/天數函式
- Android application類相關記錄AndroidAPP
- 二維碼相關工具類
- 課時40:類與物件:一些相關的BIF物件
- static關鍵字---"工具類"
- DateUtils Android時間工具類Android
- 類和類之間的比較
- Java中常用類之Object類JavaObject
- Java 常用類-程式設計師頭大的日期時間APIJava程式設計師API
- T-SQL——關於時間段類報表SQL
- 五,常用類
- Java常用類Java
- Java 常用類Java
- ImageUtils-圖片相關工具類
- 時間軸、流程類時間軸繪製
- Java中陣列及相關類的使用Java陣列
- Java Thread 類相關的幾個核心方法Javathread
- String類常用的方法
- [PAT B] 1012 數字分類
- 關於Java中的物件、類、抽象類、介面、繼承之間的聯絡Java物件抽象繼承