Java的日期類Date Date類 註意:是 java.util.Date ; 而非 java.sql.Date,此類是給資料庫訪問的時候使用的 示例 1 : 時間原點概念 所有的數據類型,無論是整數,布爾,浮點數還是字元串,最後都需要以數字的形式表現出來。 日期類型也不例外,換句話說,一個日期, ...
Java的日期類Date
Date類
註意:是java.util.Date;
而非 java.sql.Date,此類是給資料庫訪問的時候使用的
示例 1 : 時間原點概念
所有的數據類型,無論是整數,布爾,浮點數還是字元串,最後都需要以數字的形式表現出來。
日期類型也不例外,換句話說,一個日期,比如2020年10月1日,在電腦里,會用一個數字來代替。
那麼最特殊的一個數字,就是零. 零這個數字,就代表Java中的時間原點,其對應的日期是1970年1月1日 8點0分0秒 。 (為什麼是8點,因為中國的太平洋時區是UTC-8,剛好和格林威治時間差8個小時)
為什麼對應1970年呢? 因為1969年發佈了第一個 UNIX 版本:AT&T,綜合考慮,當時就把1970年當做了時間原點。
所有的日期,都是以為這個0點為基準,每過一毫秒,就+1。
示例 2 : 創建日期對象
package date;
//
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
// 當前時間
Date d1 = new Date();
System.out.println("當前時間:");
System.out.println(d1);
System.out.println();
// 從1970年1月1日 早上8點0分0秒 開始經歷的毫秒數
Date d2 = new Date(5000);
System.out.println("從1970年1月1日 早上8點0分0秒 開始經歷了5秒的時間");
System.out.println(d2);
}
}
示例 3 : getTime
getTime() 得到一個long型的整數
這個整數代表 從1970.1.1 08:00:00:000 開始 每經歷一毫秒,增加1
直接列印對象,會看到 “Tue Jan 05 09:51:48 CST 2016” 這樣的格式
package date;
//
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
//註意:是java.util.Date;
//而非 java.sql.Date,此類是給資料庫訪問的時候使用的
Date now= new Date();
//列印當前時間
System.out.println("當前時間:"+now.toString());
//getTime() 得到一個long型的整數
//這個整數代表 1970.1.1 08:00:00:000,每經歷一毫秒,增加1
System.out.println("當前時間getTime()返回的值是:"+now.getTime());
Date zero = new Date(0);
System.out.println("用0作為構造方法,得到的日期是:"+zero);
}
}
示例 4 : System.currentTimeMillis()
當前日期的毫秒數
new Date().getTime() 和 System.currentTimeMillis() 是一樣的
不過由於機器性能的原因,可能會相差幾十毫秒,畢竟每執行一行代碼,都是需要時間的
package date;
//
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date now= new Date();
//當前日期的毫秒數
System.out.println("Date.getTime() \t\t\t返回值: "+now.getTime());
//通過System.currentTimeMillis()獲取當前日期的毫秒數
System.out.println("System.currentTimeMillis() \t返回值: "+System.currentTimeMillis());
}
}
練習: 日期
藉助隨機數,創建一個從1995.1.1 00:00:00 到 1995.12.31 23:59:59 之間的隨機日期
答案:
package date;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
long second = 1000;
long minute = 60*second;
long hour = minute * 60;
long day = hour*24;
long year = day * 365;
long year1995Start = (1995-1970) * year;
long leapDay = (1995-1970)/4*day; //每隔4年有一個潤日
year1995Start+=leapDay;
long eightHour = hour*8; //8個小時的毫秒數,因為從0毫秒對應的是1970.1.1 08:00:00
year1995Start-=eightHour;
Date dStart = new Date(year1995Start);
System.out.println("1995年第一天:"+dStart);
long year1995End = year1995Start + year - 1;
Date dEnd = new Date(year1995End);
System.out.println("1995年最後一天:"+dEnd);
long randomTime = (long) (Math.random()*(year-1) + year1995Start);
Date dRandom = new Date(randomTime);
System.out.println("1995年這一年中的一個隨機時間:" + dRandom);
}
}