Java自學(xué)-日期 Date

Java的日期類(lèi)Date

Date類(lèi)
注意:是java.util.Date;
而非 java.sql.Date,此類(lèi)是給數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的時(shí)候使用的

示例 1 : 時(shí)間原點(diǎn)概念

所有的數(shù)據(jù)類(lèi)型,無(wú)論是整數(shù),布爾,浮點(diǎn)數(shù)還是字符串,最后都需要以數(shù)字的形式表現(xiàn)出來(lái)。

日期類(lèi)型也不例外,換句話(huà)說(shuō),一個(gè)日期,比如2020年10月1日,在計(jì)算機(jī)里,會(huì)用一個(gè)數(shù)字來(lái)代替。

那么最特殊的一個(gè)數(shù)字,就是零. 零這個(gè)數(shù)字,就代表Java中的時(shí)間原點(diǎn),其對(duì)應(yīng)的日期是1970年1月1日 8點(diǎn)0分0秒 。 (為什么是8點(diǎn),因?yàn)橹袊?guó)的太平洋時(shí)區(qū)是UTC-8,剛好和格林威治時(shí)間差8個(gè)小時(shí))

為什么對(duì)應(yīng)1970年呢? 因?yàn)?969年發(fā)布了第一個(gè) UNIX 版本:AT&T,綜合考慮,當(dāng)時(shí)就把1970年當(dāng)做了時(shí)間原點(diǎn)。

所有的日期,都是以為這個(gè)0點(diǎn)為基準(zhǔn),每過(guò)一毫秒,就+1。

示例 2 : 創(chuàng)建日期對(duì)象

創(chuàng)建日期對(duì)象

package date;
 
//
import java.util.Date;
 
public class TestDate {
 
    public static void main(String[] args) {
 
        // 當(dāng)前時(shí)間
        Date d1 = new Date();
        System.out.println("當(dāng)前時(shí)間:");
        System.out.println(d1);
        System.out.println();
        // 從1970年1月1日 早上8點(diǎn)0分0秒 開(kāi)始經(jīng)歷的毫秒數(shù)
        Date d2 = new Date(5000);
        System.out.println("從1970年1月1日 早上8點(diǎn)0分0秒 開(kāi)始經(jīng)歷了5秒的時(shí)間");
        System.out.println(d2);
 
    }
}

示例 3 : getTime

getTime() 得到一個(gè)long型的整數(shù)
這個(gè)整數(shù)代表 從1970.1.1 08:00:00:000 開(kāi)始 每經(jīng)歷一毫秒,增加1
直接打印對(duì)象,會(huì)看到 “Tue Jan 05 09:51:48 CST 2016” 這樣的格式

getTime

package date;
  
//
import java.util.Date;
  
public class TestDate {
  
    public static void main(String[] args) {
        //注意:是java.util.Date;
        //而非 java.sql.Date,此類(lèi)是給數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的時(shí)候使用的
        Date now= new Date();
        //打印當(dāng)前時(shí)間
        System.out.println("當(dāng)前時(shí)間:"+now.toString());
        //getTime() 得到一個(gè)long型的整數(shù)
        //這個(gè)整數(shù)代表 1970.1.1 08:00:00:000,每經(jīng)歷一毫秒,增加1
        System.out.println("當(dāng)前時(shí)間getTime()返回的值是:"+now.getTime());
          
        Date zero = new Date(0);
        System.out.println("用0作為構(gòu)造方法,得到的日期是:"+zero);
          
    }
}

示例 4 : System.currentTimeMillis()

當(dāng)前日期的毫秒數(shù)
new Date().getTime() 和 System.currentTimeMillis() 是一樣的
不過(guò)由于機(jī)器性能的原因,可能會(huì)相差幾十毫秒,畢竟每執(zhí)行一行代碼,都是需要時(shí)間的


System.currentTimeMillis()
package date;
   
//
import java.util.Date;
   
public class TestDate {
   
    public static void main(String[] args) {
        Date now= new Date();
  
        //當(dāng)前日期的毫秒數(shù)
        System.out.println("Date.getTime() \t\t\t返回值: "+now.getTime());
        //通過(guò)System.currentTimeMillis()獲取當(dāng)前日期的毫秒數(shù)
        System.out.println("System.currentTimeMillis() \t返回值: "+System.currentTimeMillis());
           
    }
}

練習(xí)日期

借助隨機(jī)數(shù),創(chuàng)建一個(gè)從1995.1.1 00:00:00 到 1995.12.31 23:59:59 之間的隨機(jī)日期

答案

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年有一個(gè)潤(rùn)日
        year1995Start+=leapDay;
        long eightHour = hour*8; //8個(gè)小時(shí)的毫秒數(shù),因?yàn)閺?毫秒對(duì)應(yīng)的是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年這一年中的一個(gè)隨機(jī)時(shí)間:" + dRandom);
          
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本文目的:掌握 Java 中日期和時(shí)間常用 API 的使用。參考:Jakob Jenkov的英文教程Java Da...
    czwbig閱讀 1,134評(píng)論 0 4
  • 自從JDK 1.0開(kāi)始,Java就提供了Date來(lái)處理時(shí)間和日期,作為老古董自然有很多東西是過(guò)時(shí)的。然后出現(xiàn)了Ca...
    湫水長(zhǎng)天閱讀 2,094評(píng)論 0 16
  • java.util.Date 類(lèi)代表某一特定的時(shí)間,精確到毫秒。該類(lèi)中所有方法接受或返回的年,月,日,時(shí),分,秒和...
    花開(kāi)半夏ii閱讀 900評(píng)論 0 1
  • 1.Grails中的時(shí)間機(jī)制: 1、首先,要知道的是,在頁(yè)面中選定的時(shí)間傳到服務(wù)器時(shí),因?yàn)橥ㄟ^(guò)網(wǎng)路只能傳遞字符串?dāng)?shù)...
    煦風(fēng)閱讀 1,909評(píng)論 1 4
  • 這是今天上午十點(diǎn)多,跟母親一起來(lái)我家的曾經(jīng)的學(xué)生,馬上高二的小仇同學(xué)的考試作文題。 生命的節(jié)奏。生命的節(jié)奏是什么?...
    天堂鳥(niǎo)鳴閱讀 143評(píng)論 0 4