Java入門教程五(數字和日期處理)

韭菜Java發表於2019-06-05

Java 提供了處理相關問題的類,包括 Math 類、Random 類、BigInteger 類、Date 類等。

Math類

Math 類封裝了常用的數學運算,提供了基本的數學操作,如指數、對數、平方根和三角函式等。Math 類位於 java.lang 包

靜態常量

Math 類中包含 E 和 PI 兩個靜態常量,其中 E 用於記錄 e 的常量,而 PI 用於記錄圓周率的值。

System.out.println(Math.E);   //2.718281828459045
System.out.println(Math.PI);    //3.141592653589793

最大值、最小值和絕對值

static int abs(int a)   返回 a 的絕對值
static long abs(long a) 返回 a 的絕對值
static float abs(float a)   返回 a 的絕對值
static double abs(double a) 返回 a 的絕對值
static int max(int x,int y) 返回 x 和 y 中的最大值
static double max(double x,double y)    返回 x 和 y 中的最大值
static long max(long x,long y)  返回 x 和 y 中的最大值
static float max(float x,float y)   返回 x 和 y 中的最大值
static int min(int x,int y) 返回 x 和 y 中的最小值
static long min(long x,long y)  返回 x 和 y 中的最小值
static double min(double x,double y)    返回 x 和 y 中的最小值
static float min(float x,float y)   返回 x 和 y 中的最小值

求整運算

static double ceil(double a)    返回大於或等於 a 的最小整數
static double floor(double a)   返回小於或等於 a 的最大整數
static double rint(double a)    返回最接近 a 的整數值,如果有兩個同樣接近的整數,則結果取偶數
static int round(float a)   將引數加上 1/2 後返回與引數最近的整數
static long round(double a) 將引數加上 1/2 後返回與引數最近的整數,然後強制轉換為長整型

三角函式運算

tatic double sin(double a)  返回角的三角正弦值,引數以孤度為單位
static double cos(double a) 返回角的三角餘弦值,引數以孤度為單位
static double asin(double a)    返回一個值的反正弦值,引數域在 [-1,1],值域在 [-PI/2,PI/2]
static double acos(double a)    返回一個值的反餘弦值,引數域在 [-1,1],值域在 [0.0,PI]
static double tan(double a) 返回角的三角正切值,引數以弧度為單位
static double atan(double a)    返回一個值的反正切值,值域在 [-PI/2,PI/2]
static double toDegrees(double angrad)  將用孤度表示的角轉換為近似相等的用角度表示的角
staticdouble toRadians(double angdeg)   將用角度表示的角轉換為近似相等的用弧度表示的角

指數運算

static double exp(double a) 返回 e 的 a 次冪
static double pow(double a,double b)    返回以 a 為底數,以 b 為指數的冪值
static double sqrt(double a)    返回 a 的平方根
static double cbrt(double a)    返回 a 的立方根
static double log(double a) 返回 a 的自然對數,即 lna 的值
static double log10(double a)   返回以 10 為底 a 的對數

生成隨機數

生成一個指定範圍之內的隨機數字有兩種方法:一種是呼叫 Math 類的 random() 方法,一種是使用 Random 類
Random 類提供了豐富的隨機數生成方法,可以產生 boolean、int、long、float, byte 陣列以及 double 型別的隨機數,這是它與 random() 方法最大的不同之處。random() 方法只能產生 double 型別的 0~1 的隨機數。
Random 類位於 java.util 包中,該類常用的有如下兩個構造方法。
Random():該構造方法使用一個和當前系統時間對應的數字作為種子數,然後使用這個種子數構造 Random 物件。
Random(long seed):使用單個 long 型別的引數建立一個新的隨機數生成器。

oolean nextBoolean()    生成一個隨機的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble() 生成一個隨機的 double 值,數值介於[0,1.0),含 0 而不包含 1.0
int nextlnt()   生成一個隨機的 int 值,該值介於 int 的區間,也就是 -231~231-1。如果
需要生成指定區間的 int 值,則需要進行一定的數學變換
int nextlnt(int n)  生成一個隨機的 int 值,該值介於 [0,n),包含 0 而不包含 n。如果想生成
指定區間的 int 值,也需要進行一定的數學變換
void setSeed(long seed) 重新設定 Random 物件中的種子數。設定完種子數以後的 Random 物件
和相同種子數使用 new 關鍵字建立出的 Random 物件相同
long nextLong() 返回一個隨機長整型數字
boolean nextBoolean()   返回一個隨機布林型值
float nextFloat()   返回一個隨機浮點型數字
double nextDouble() 返回一個隨機雙精度值

數字格式化

使用 DedmalFormat 類對結果進行格式化處理。例如,將小數位統一成 2 位,不足 2 位的以 0 補齊。DecimalFormat 是 NumberFormat 的一個子類,用於格式化十進位制數字。DecimalFormat 類包含一個模式和一組符號

0   顯示數字,如果位數不夠則補 0
#   顯示數字,如果位數不夠不發生變化
.   小數分隔符
-   減號
,   組分隔符
E   分隔科學記數法中的尾數和小數
%   字首或字尾,乘以 100 後作為百分比顯示
?   乘以 1000 後作為千進位制貨幣符顯示。用貨幣符號代替。如果雙寫,用國際貨幣符號代替;
如果出現在一個模式中,用貨幣十進位制分隔符代替十進位制分隔符
float f = 5487.45697;
DecimalFormat df1=new DecimalFormat("0.0");
DecimalFormat df2=new DecimalFormat("#.#");
DecimalFormat df3=new DecimalFormat("000.000");
DecimalFormat df4=new DecimalFormat("###.###");
System.out.println("0.0 格式:"+df1.format(f));  //0.0 格式:5487.5
System.out.println("#.# 格式:"+df2.format(f));  //#.# 格式:5487.5
System.out.println("000.000 格式:"+df3.format(f)); //000.000 格式:5487.457
System.out.println("###.### 格式:"+df4.format(f)); //###.### 格式:5487.457

時間日期的處理

java.util.Date 類和 java.util.Calendar 類。其中,Date 類主要封裝了系統的日期和時間的資訊,Calendar 類則會根據系統的日曆來解釋 Date 物件

Date 類

Date 類表示系統特定的時間戳,可以精確到毫秒。Date 物件表示時間的預設順序是星期、月、日、小時、分、秒、年。Date 類有如下兩個構造方法。
Date():此種形式表示分配 Date 物件並初始化此物件,以表示分配它的時間(精確到毫秒),使用該構造方法建立的物件可以獲取本地的當前時間。
Date(long date):此種形式表示從 GMT 時間(格林尼治時間)1970 年 1 月 1 日 0 時 0 分 0 秒開始經過引數 date 指定的毫秒數。

Date date1=new Date();    //呼叫無引數建構函式
System.out.println(date1.toString());    //輸出:Wed May 18 21:24:40 CST 2016
Date date2=new Date(60000);    //呼叫含有一個long型別引數的建構函式
System.out.println(date2);    //輸出:Thu Jan 0108:01:00 CST 1970

Date 類提供了許多與日期和事件相關的方法

boolean after(Date when)    判斷此日期是否在指定日期之後
boolean before(Date when)   判斷此日期是否在指定日期之前
int compareTo(Date anotherDate) 比較兩個日期的順序
boolean equals(Object obj)  比較兩個日期的相等性
long getTime()  返回自 1970 年 1 月 1 日 00:00:00 GMT 以來,此 Date 物件表示的毫秒數
String toString()   把此 Date 物件轉換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。
其中 dow 是一週中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

Calendar 類

Calendar 類是一個抽象類,它為特定瞬間與 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日曆欄位之間的轉換提供了一些方法,併為操作日曆欄位(如獲得下星期的日期) 提供了一些方法建立 Calendar 物件不能使用 new 關鍵字,因為 Calendar 類是一個抽象類,但是它提供了一個 getInstance() 方法來獲得 Calendar類的物件。getInstance() 方法返回一個 Calendar 物件,其日曆欄位已由當前日期和時間初始化。

Calendar c=Calendar.getInstance();

建立了一個 Calendar 物件後,就可以通過 Calendar 物件中的一些方法來處理日期、時間

void add(int field, int amount) 根據日曆的規則,為給定的日曆欄位 field 新增或減去指定的時間量 amount
boolean after(Object when)  判斷此 Calendar 表示的時間是否在指定時間 when 之後,並返回判斷結果
boolean before(Object when) 判斷此 Calendar 表示的時間是否在指定時間 when 之前,並返回判斷結果
void clear()    清空 Calendar 中的日期時間值
int compareTo(Calendar anotherCalendar) 比較兩個 Calendar 物件表示的時間值(從格林威治時間 1970 年 01 月 01 日
00 時 00 分 00 秒至現在的毫秒偏移量),大則返回 1,小則返回 -1,相等返回 0
int get(int field)  返回指定日曆欄位的值
int getActualMaximum(int field) 返回指定日曆欄位可能擁有的最大值
int getActualMinimum(int field) 返回指定日曆欄位可能擁有的最小值
int getFirstDayOfWeek() 獲取一星期的第一天。根據不同的國家地區,返回不同的值
static Calendar getInstance()   使用預設時區和語言壞境獲得一個日曆
static Calendar getInstance(TimeZone zone)  使用指定時區和預設語言環境獲得一個日曆
static Calendar getInstance(TimeZone zone,
Locale aLocale) 使用指定時區和語言環境獲得一個日曆
Date getTime()  返回一個表示此 Calendar 時間值(從格林威治時間 1970 年 01 月 01 日 00 時
00 分 00 秒至現在的毫秒偏移量)的 Date 物件
long getTimeInMillis()  返回此 Calendar 的時間值,以毫秒為單位
void set(int field, int value)  為指定的日曆欄位設定給定值
void set(int year, int month, int date) 設定日曆欄位 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay,
int minute, int second) 設定欄位 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)   設定一星期的第一天是哪一天
void setTimeInMillis(long millis)   用給定的 long 值設定此 Calendar 的當前時間值

日期格式化

格式化日期表示將日期/時間格式轉換為預先定義的日期/時間格式。例如將日期“Fri May 18 15:46:24 CST2016” 格式轉換為 “2016-5-18 15:46:24 星期五”的格式。使用 DateFormat 類和 SimpleDateFormat 類來格式化日期

DateFormat 類

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期→文字)、解析(文字→日期)和標準化日期
在建立 DateFormat 物件時不能使用 new 關鍵字,而應該使用 DateFormat 類中的靜態方法 getDateInstance()

DateFormat df=DateFormat.getDatelnstance();

String format(Date date)    將 Date 格式化日期/時間字串
Calendar getCalendar()  獲取與此日期/時間格式相關聯的日曆
static DateFormat getDateInstance() 獲取具有預設格式化風格和預設語言環境的日期格式
static DateFormat getDateInstance(int style)    獲取具有指定格式化風格和預設語言環境的日期格式
static DateFormat getDateInstance(int style,
Locale locale)  獲取具有指定格式化風格和指定語言環境的日期格式
static DateFormat getDateTimeInstance() 獲取具有預設格式化風格和預設語言環境的日期/時間
格式
static DateFormat getDateTimeInstance(int
dateStyle,int timeStyle)    獲取具有指定日期/時間格式化風格和預設語言環境的
日期/時間格式
static DateFormat getDateTimeInstance(int
dateStyle,int timeStyle,Locale locale)  獲取具有指定日期/時間格式化風格和指定語言環境的
日期/時間格式
static DateFormat getTimeInstance() 獲取具有預設格式化風格和預設語言環境的時間格式
static DateFormat getTimeInstance(int style)    獲取具有指定格式化風格和預設語言環境的時間格式
static DateFormat getTimeInstance(int style,
Locale locale)  獲取具有指定格式化風格和指定語言環境的時間格式
void setCalendar(Calendar newCalendar)  為此格式設定日曆
Date parse(String source)   將給定的字串解析成日期/時間

SimpleDateFormat 類

使用 DateFormat 類格式化日期/時間並不能滿足要求,那麼就需要使用 DateFormat 類的子類——SimpleDateFormat
SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類,它允許進行格式化(日期→文字)、解析(文字→日期)和規範化。SimpleDateFormat 使得可以選擇任何使用者定義的日期/時間格式的模式
SimpleDateFormat 類主要有如下 3 種構造方法

SimpleDateFormat():用預設的格式和預設的語言環境構造 SimpleDateFormat。
SimpleDateFormat(String pattern):用指定的格式和預設的語言環境構造 SimpleDateF ormat。
SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的語言環境構造 SimpleDateF ormat。
y   年份。一般用 yy 表示兩位年份,yyyy 表示 4 位年份  使用 yy 表示的年扮,如 11;
使用 yyyy 表示的年份,如 2011
M   月份。一般用 MM 表示月份,如果使用 MMM,則會
根據語言環境顯示不同語言的月份 使用 MM 表示的月份,如 05;
使用 MMM 表示月份,在 Locale.CHINA
語言環境下,如“十月”;在 Locale.US
語言環境下,如 Oct
d   月份中的天數。一般用 dd 表示天數  使用 dd 表示的天數,如 10
D   年份中的天數。表示當天是當年的第幾天, 用 D 表示  使用 D 表示的年份中的天數,如 295
E   星期幾。用 E 表示,會根據語言環境的不同, 顯示不
同語言的星期幾 使用 E 表示星期幾,在 Locale.CHINA 語
言環境下,如“星期四”;在 Locale.US 語
言環境下,如 Thu
H   一天中的小時數(0~23)。一般用 HH 表示小時數  使用 HH 表示的小時數,如 18
h   一天中的小時數(1~12)。一般使用hh表 示小時數  使用 hh 表示的小時數,如 10 (注意 10 有
可能是 10 點,也可能是 22 點)
m   分鐘數。一般使用 mm 表示分鐘數   使用 mm 表示的分鐘數,如 29
s   秒數。一般使用 ss 表示秒數 使用 ss 表示的秒數,如 38
S   毫秒數。一般使用 SSS 表示毫秒數  使用 SSS 表示的毫秒數,如 156

相關文章