日期時間類——Java常用類


時間戳(timestamp):距離特定時間的間隔.

計算機中的時間戳是指距離歷元(1970-01-01 00:00:00:000)的時間間隔(ms).

格林尼治時間(GMT):一個標准時間,用於全球時間的標准化,也稱世界協調時(UT)各個國家通過時區偏移來定義各國的標准時間。

計算機時間2019-04-29 20:14:00 該時間距離歷元經過的毫秒數long類型存儲。

計算機中的時間表示為,當前時間距離歷元經過的毫秒數,即時間戳。在計算機中,知道時間戳,就知道時間。

時間本質上是一個整型

 

中國位於東八區

 

中國的標准時china standard time = UTC + 08:00

 

日本的標准時 = UTC + 09:00

1 Date

類Date,常見用法:

1 創建當前時間

2 獲取當前時間的時間戳

3 通過時間戳創建Data對象

 1 public class Test01 {
 2 
 3     public static void main(String[] args) {
 4         //獲取當前時間
 5         Date date= new Date();
 6         System.out.println(date);
 7         
 8         //獲取date的時間戳
 9         long time1 = date.getTime();
10         System.out.println(time1);
11         
12         //通過時間戳創建Date對象
13         long time2 = 0;
14         Date date2 = new Date(time1);
15         System.out.println(date2);
16         
17         // 需求:請構建一個時間,表示未來一天的當前時間。
18         /*
19          * 計算機中的時間表示為,當前時間距離歷元經過的毫秒數,即時間戳。在計算機中,知道時間戳,就知道時間。
20         未來一天的當前時間距歷元的毫秒數(時間戳)為,當前時間戳+一天的毫秒數*/
21         
22         long dayTime = 24*3600*1000;
23         long futureTime = dayTime + date.getTime();
24         Date date3 = new Date(futureTime);
25         System.out.println(date3);
26         
27         
28     }
29 }

2.1 時間比較

1 date1.compareTo(date2)

2 date1.equals(date2)

改變時間戳:setTime() 如:

 date1.setTime(date1.getTime()+24*3600*1000);

 1 public static void main(String[] args) {
 2         
 3         // 比較兩個時間
 4         Date d1 = new Date();
 5         Date d2 = new Date(d1.getTime()+1000);
 6         
 7         System.out.println(d1.before(d2));
 8         System.out.println(d1.after(d2));
 9         
10         System.out.println(d1.compareTo(d2));
11         
12         System.out.println(d1.equals(d2));
13         
14         
15         // d1.getTime() - d2.getTime()
16         // setTime:改變Date對象的時間戳
17         d1.setTime(d1.getTime()+24*3600*1000);
18         System.out.println(d1);
19     }

2.2日期時間的格式化

【1】把Date對象格式化成特定的字符串 SimpleDateFormat  df = new SimpleDateFormat();

(1)日期格式化->字符串

(2)使用默認的模式和語言環境

(3)使用指定的模式格式化

(4)修改模式

 1 public class Test02 {
 2 
 3     public static void main(String[] args) {
 4         Date date = new Date();
 5         System.out.println(date);
 6         
 7         //將日期格式化成字符串
 8         SimpleDateFormat dF = new SimpleDateFormat();
 9         //使用默認的模式和語言環境
10         //19-4-29 下午9:01
11         String dateStr = dF.format(date);
12         System.out.println(dateStr);
13         
14         //[2]使用指定的模式格式化
15         SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
16         String dateStr2 = df2.format(date);
17         System.out.println(dateStr2);
18         
19         //修改時間格式
20         df2.applyPattern("yyyy-MM-dd");
21         String dateStr3 = df2.format(date);
22         System.out.println(dateStr3);
23     }
24 }

【2】把特定的時間格式的字符串解析成Date對象

(1)"2019-04-29 15:48:00" ->Date

 1 public class Test03 {
 2 
 3     public static void main(String[] args) {
 4         //把特定的格式的字符串解析成Date對象
 5         String str = "2019-04-29 15:21:25";
 6         SimpleDateFormat dF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 7         
 8         try {
 9             Date date = dF.parse(str);
10             System.out.println(date);
11         } catch (ParseException e) {
12             e.printStackTrace();
13         }
14     }
15 }

2.3Calender

Calendar是日歷類,本質上內部擁有一個屬性 long time 表示該日歷所具體的時間戳。

同時Calendar內部通過對time運算計算出很多日歷字段,把這些日歷字段存在一個容器中,並提供set/get方法用於設置或者訪問這些字段。

Calender是抽象類,沒有構造方法但Calender有特殊的創建對象的方法

Calender cal = Calender.getInstance();

Calender獲取年,月,日,時,分,秒,星期,本月的第一天和最后一天

 1 public class Test04 {
 2 
 3     public static void main(String[] args) {
 4         //通過工廠設計模式構建一個對象
 5         Calendar cal = Calendar.getInstance();
 6         System.out.println(cal);
 7         
 8         //獲取年
 9         System.out.println(cal.get(cal.YEAR));
10         
11         //獲取月,索引從0開始,0-表示1月
12         System.out.println(cal.get(cal.MONTH));
13         
14         //獲取日
15         System.out.println(cal.get(cal.DAY_OF_MONTH));
16         
17         //
18         System.out.println(cal.get(cal.HOUR_OF_DAY));
19         
20         //
21         System.out.println(cal.get(cal.MINUTE));
22         
23         //
24         System.out.println(cal.get(cal.SECOND));
25         
26         //毫秒
27         System.out.println(cal.get(cal.MILLISECOND));
28         
29         //獲取星期幾    一周的第一天是從周日開始的
30         System.out.println(cal.get(cal.DAY_OF_WEEK));
31         
32         //本月的第一天和本月的最后一天
33         System.out.println(cal.getActualMinimum(cal.DAY_OF_MONTH));
34         System.out.println(cal.getActualMaximum(cal.DAY_OF_MONTH));
35     }
36 }

2.4 Math

Math 類包含用於執行基本數學運算的方法。例如隨機數、平方、立方

Math類獲取Pi(3.14159265358..),絕對值,ceil(向上取整),floor(向下取整),兩個數中的max/min, pow(x,y)x的y次方,Math.random 隨機數,四舍五入,

把弧度轉角度,把角度轉弧度, sin(a),cos(a)/tan(a)

 1 public static void main(String[] args) {
 2         //常用屬性 PI(3.14159265358..)
 3         System.out.println(Math.PI);
 4         
 5         
 6         //常用方法
 7         //絕對值
 8         System.out.println(Math.abs(-10));
 9         System.out.println(Math.abs(10));
10         
11         //ceil(向上取整)  floor向下取整
12         //返回比10.1大的最小整數 => 向上取整
13         System.out.println(Math.ceil(10.1));
14         //返回比10.1小的最大整數 => 向下取整
15         System.out.println(Math.floor(10.1));
16         
17         //max/min
18         System.out.println(Math.max(10, 20));
19         System.out.println(Math.min(10, 20));
20         
21         //pow(x,y)x的y次方
22         System.out.println(Math.pow(2, 3));
23         
24         //Math.randow 隨機數
25         //產生[m,n]隨機整數 <=> (int)(Math.random()*(n-m+1)+m)
26         
27         //四舍五入
28         System.out.println(Math.round(4.5));
29         
30         
31         //把弧度轉角度
32         System.out.println(Math.toDegrees(Math.PI/2));
33         //角度轉弧度
34         System.out.println(Math.toRadians(180));
35         
36         //sin(a)/cos(a)/tan(a)
37         System.out.println(Math.sin(Math.PI/6));
38         
39         //需求:求兩點之間的距離(x1,y1)- (x2,y2)的距離。
40         //Math.sqrt(Math.pow((x1-x2), 2)+Math.pow((y1-y2), 2));
41     }

2.5 枚舉

2.5.1 枚舉簡介

枚舉由一組固定的常量組成的類型,自定義數據類型。語法:

1 [修飾符] enum enumName{
2   常量值1,
3   常量值2,
4   常量值3…
5   
6   常量值n[;]
7 }

枚舉的常量值一定是可列舉的有限值。常量值的類型都是public static final

案例:定義一個性別的枚舉類型

 

1 public enum Gender {
2     男,
3     女,
4     保密;
5 }

 

Gender 一種自定義的數據類型,可以用於聲明變量,且變量的取值必須是枚舉值的其中一個。gender的值必須是男或者女或者保密。

 

1 public class Test06 {
2 
3     public static void main(String[] args) {
4         //聲明一個Gender枚舉類型的變量gender,並取值為男
5         Gender gender = Gender.男;
6     }
7 }

java中所有的枚舉類型都繼承於Enum類。可以把枚舉類型看出一個類。

 

 1 public class Student {
 2 
 3     private String name;
 4     private int age;
 5     private Gender gender;
 6     public String getName() {
 7         return name;
 8     }
 9     public void setName(String name) {
10         this.name = name;
11     }
12     public int getAge() {
13         return age;
14     }
15     public void setAge(int age) {
16         this.age = age;
17     }
18     public Gender getGender() {
19         return gender;
20     }
21     public void setGender(Gender gender) {
22         this.gender = gender;
23     }
24     public Student() {
25         super();
26     }
27     public Student(String name, int age, Gender gender) {
28         super();
29         this.name = name;
30         this.age = age;
31         this.gender = gender;
32     }
33     @Override
34     public String toString() {
35         return "Student [name=" + name + ", age=" + age + ", gender=" + gender
36                 + "]";
37     }
38     
39     //class Gender extends Enum{}   看成一個類
40     enum Gender {
41         男,女,保密;
42     }

 

2.5.2 枚舉和字符串轉化

【1】枚舉值->字符串

【2】字符串->枚舉值

 

 1 public static void main(String[] args) {
 2         //聲明一個Gender枚舉類型 的變量gender,並取值為男
 3         Gender gender = Gender.男;
 4         
 5         //枚舉值->字符串
 6         System.out.println(gender.toString());
 7         
 8         //字符串-> 枚舉值
 9         String string = "保密";
10         
11         //可能產生IllegalArgumentException 非法參數異常
12         Gender gender2 = Enum.valueOf(Gender.class, string);
13         System.out.println(gender2);
14     }

 

2.5.3

枚舉和switch

1 public enum Week {
2     Monday,
3     TUESDAY,
4     WEDNESDAY,
5     THURSDAY,
6     FRIDAY,
7     SATURDAY,
8     SUNDAY;
9 }
 1 public class Test08 {
 2 
 3     public static void main(String[] args) {
 4         // 需求:有一個變量表示星期幾,輸出對於的教學安排
 5         Week week = Week.SUNDAY;
 6         switch (week) {
 7             case Monday:
 8             case TUESDAY:
 9             case THURSDAY:
10             case FRIDAY:
11             case SATURDAY:{
12                 System.out.println("上課");
13                 break;
14             }
15             case WEDNESDAY:
16             case SUNDAY:{
17                 System.out.println("練習");
18                 break;
19             }
20 
21         }
22     }

枚舉的其他方法

【1】返回此枚舉常量的名稱

【2】返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)。

 

1 public static void main(String[] args) {
2         Week week = Week.SUNDAY;
3         
4         //返回枚舉常量的名稱
5         System.out.println(week.name());
6         
7         //返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)。
8         System.out.println(week.ordinal());
9     }

 

輸出結果為:

SUNDAY
6

 

 

 

總結:

  1.只能夠取特定值中的一個

  2.使用enum關鍵字

  3.所有的枚舉類型隱性地繼承自 java.lang.Enum。(枚舉實質上還是類!而每個被枚舉的成員實質就是一個枚舉類型的實例,他們  默認都是public static final的。可以直接通過枚舉類型名直接使用它們。)

  4.強烈建議當你需要定義一組常量時,使用枚舉類型

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM