欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你熟練掌握J(rèn)ava中的日期時(shí)間相關(guān)類

 更新時(shí)間:2023年05月30日 11:57:18   作者:一一哥Sun  
我們?cè)陂_(kāi)發(fā)時(shí),除了數(shù)字、數(shù)學(xué)這樣的常用API之外,還有日期時(shí)間類,更是會(huì)被經(jīng)常使用,比如我們項(xiàng)目中必備的日志功能,需要記錄異常等信息產(chǎn)生的時(shí)間,本文就帶各位來(lái)學(xué)習(xí)一下相關(guān)的日期時(shí)間類有哪些

一. 概念簡(jiǎn)介

在開(kāi)始學(xué)習(xí)今天的知識(shí)之前,有必要先給大家講解一下與今天內(nèi)容相關(guān)的一些概念,否則可能會(huì)讓一些小白產(chǎn)生迷惑。

1. 日期和時(shí)間的區(qū)別

首先我們得搞清楚,日期和時(shí)間的概念并不一樣。日期是指某一天,它不是連續(xù)變化的,可以說(shuō)是離散的。而時(shí)間有兩種概念,一種是不帶日期的時(shí)間,如10:30:01;另一種是帶日期的時(shí)間,如2023-01-01 15:11:40。只有帶日期的時(shí)間,才能唯一確定某個(gè)時(shí)刻,而不帶日期的時(shí)間是無(wú)法確定一個(gè)唯一時(shí)刻的。

2. 本地時(shí)間

本地時(shí)間其實(shí)就是每個(gè)地方,當(dāng)前所在國(guó)家所采用的標(biāo)準(zhǔn)時(shí)間。比如我們國(guó)家就是采用的北京時(shí)間,只要是在中國(guó)大陸,我們說(shuō)晚上8:00見(jiàn),這個(gè)8:00指的就是北京時(shí)間。即使我們國(guó)家的時(shí)區(qū),其實(shí)包括了從東五區(qū)到東九區(qū)共5個(gè)時(shí)區(qū),但我們?nèi)珖?guó)都是統(tǒng)一采用的東八區(qū)的區(qū)時(shí),這樣各地區(qū)人員之間的交流才不會(huì)產(chǎn)生歧義。但如果是在別的國(guó)家,那這個(gè)本地時(shí)間,就是他們國(guó)家的標(biāo)準(zhǔn)區(qū)時(shí)了,所以每個(gè)國(guó)家的標(biāo)準(zhǔn)區(qū)時(shí)可能是不同的。

3. 時(shí)區(qū)表示法

我們初中學(xué)地里的時(shí)候,就學(xué)過(guò)時(shí)區(qū)的概念,這里就不多講了。在計(jì)算機(jī)中,如果我們想準(zhǔn)確地確定一個(gè)時(shí)間,需要把本地時(shí)間和時(shí)區(qū)結(jié)合在一起才行。其中時(shí)區(qū)有如下幾種表示方式:

GMT UTC 加時(shí)區(qū)偏移表示法:如GMT+08:00 或 UTC+08:00,就表示東八區(qū)的時(shí)間。因?yàn)楸本r(shí)區(qū)是東八區(qū),領(lǐng)先UTC 8個(gè)小時(shí),所以將UTC裝換成北京時(shí)間時(shí),要加上8小時(shí)。GMT(Greenwich Mean Time)是格林威治標(biāo)準(zhǔn)時(shí)間,UTC(Universal Time Coordinated)是世界統(tǒng)一時(shí)間或世界標(biāo)準(zhǔn)時(shí)間, GMT UTC 其實(shí)基本是等價(jià)的,它們都是英國(guó)倫敦的本地時(shí)間。但UTC使用了更精確的原子鐘計(jì)時(shí),每隔幾年會(huì)有一個(gè)閏秒,不過(guò)我們?cè)陂_(kāi)發(fā)時(shí)可以忽略兩者的誤差,因?yàn)橛?jì)算機(jī)的時(shí)鐘在聯(lián)網(wǎng)時(shí)會(huì)自動(dòng)與時(shí)間服務(wù)器同步時(shí)間。

時(shí)區(qū)縮寫(xiě)表示法:如CST是China Standard Time的縮寫(xiě),即中國(guó)標(biāo)準(zhǔn)時(shí)間。但CST也是美國(guó)中部時(shí)間Central Standard Time USA的縮寫(xiě),因此有些縮寫(xiě)容易產(chǎn)生混淆,開(kāi)發(fā)時(shí)盡量不要使用縮寫(xiě)形式。

洲/城市表示法:如Asia/Shanghai,表示上海所在地的時(shí)區(qū)。我們要特別注意,城市名稱并不是任意的城市,而是由國(guó)際標(biāo)準(zhǔn)組織規(guī)定的城市。

4. 本地化

本地化并不只包括時(shí)間這一種信息,還包括一個(gè)國(guó)家或地區(qū)所采用的日期、時(shí)間、數(shù)字、貨幣等各種信息的格式,開(kāi)發(fā)時(shí)通常使用Locale進(jìn)行表示。Locale由“語(yǔ)言_國(guó)家”的字母縮寫(xiě)構(gòu)成,如“zh_CN”就表示“中文+中國(guó)”,“en_US”表示“英文+美國(guó)”。其中語(yǔ)言是小寫(xiě),國(guó)家是大寫(xiě)。

而對(duì)于不同國(guó)家或地區(qū)的Locale日期部分來(lái)說(shuō),如中國(guó)和美國(guó)的本地時(shí)間表示方式如下:

  • zh_CN:2023-01-24
  • en_US:01/24/2023

5. 夏令時(shí)

夏令時(shí)(Daylight Saving Time:DST),也叫夏時(shí)制,又稱“日光節(jié)約時(shí)制”,是一種為了節(jié)約能源而人為規(guī)定地方時(shí)間的制度。一般在天亮早的夏季人為將時(shí)間調(diào)快一小時(shí),可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。

我們國(guó)家曾經(jīng)實(shí)行過(guò)一段時(shí)間夏令時(shí),但在1992年就廢除了,不過(guò)美國(guó)人到現(xiàn)在還在使用。所以涉及到跨國(guó)應(yīng)用開(kāi)發(fā)時(shí),相關(guān)時(shí)間的換算可能會(huì)有點(diǎn)復(fù)雜。因?yàn)樯婕暗较牧顣r(shí),相同的時(shí)區(qū),如果表示的方式不同,轉(zhuǎn)換出的時(shí)間也是不同的。

6. Epoch Time時(shí)間起點(diǎn)

Epoch Time是一個(gè)固定的通用時(shí)間,即世界標(biāo)準(zhǔn)時(shí)間(UTC) 1970-01-01 00:00:00 UTC,它是計(jì)算機(jī)里時(shí)間開(kāi)始的起點(diǎn),該起點(diǎn)被記為0,而1970年以前的時(shí)間被認(rèn)為是負(fù)數(shù)。我們知道,現(xiàn)實(shí)世界的時(shí)間誰(shuí)也不知道是從什么時(shí)候開(kāi)始的,但是計(jì)算機(jī)發(fā)明的時(shí)間并不長(zhǎng),為了方便大家進(jìn)行各種開(kāi)發(fā)和計(jì)算,于是國(guó)際標(biāo)準(zhǔn)委員會(huì)就給計(jì)算機(jī)設(shè)置了一個(gè)時(shí)間的起點(diǎn)。以這個(gè)時(shí)間為起點(diǎn),每過(guò)去一秒,該數(shù)值就加1,這樣我們就可以算出對(duì)應(yīng)的公歷時(shí)間日期(不包括閏秒)。 Epoch Time在不同的編程語(yǔ)言中,會(huì)有幾種不同的存儲(chǔ)方式:

  • 以秒為單位的整數(shù):1574208900,缺點(diǎn)是精度只能到秒;
  • 以毫秒為單位的整數(shù):1574208900123,最后3位表示毫秒數(shù);
  • 以秒為單位的浮點(diǎn)數(shù):1574208900.123,小數(shù)點(diǎn)后表示零點(diǎn)幾秒。

7. 時(shí)間戳

時(shí)間戳(timestamp),也稱為Unix時(shí)間 或 POSIX時(shí)間,它是一種時(shí)間表示方式。表示從1970年1月1日0時(shí)0分0秒(格林尼治時(shí)間)開(kāi)始,一直到現(xiàn)在所經(jīng)過(guò)的秒數(shù)或毫秒數(shù)。在Java一般是用long類型來(lái)存儲(chǔ)該值,但在別的編程語(yǔ)言中有可能是使用float類型。 比如1574208900就表示從1970年1月1日零點(diǎn)開(kāi)始,到2019年11月20日8點(diǎn)15分截止,一共經(jīng)歷了1574208900秒,所以換算成北京時(shí)間就是:1574208900 = 北京時(shí)間2019-11-20 8:15:00。如果我們要獲取當(dāng)前的時(shí)間戳,在Java中可以使用System.currentTimeMillis()方法。

從本質(zhì)上來(lái)說(shuō),時(shí)間戳就是個(gè)時(shí)間差值,其值與時(shí)區(qū)無(wú)關(guān)。比如在UTC標(biāo)準(zhǔn)下,時(shí)間起點(diǎn)的時(shí)間戳就是timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00,此時(shí)對(duì)應(yīng)的北京時(shí)間是timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00

了解了以上這些基本概念之后,我們就可以繼續(xù)往下學(xué)習(xí)今天其他的內(nèi)容了。

二. Date日期時(shí)間類

1. 簡(jiǎn)介

如果我們想在Java中獲取當(dāng)前的時(shí)間,可以使用 java.util.Date類 和 java.util.Calendar類來(lái)實(shí)現(xiàn)。其中,Date類封裝了系統(tǒng)的日期和時(shí)間信息,Calendar類則會(huì)根據(jù)系統(tǒng)的日歷來(lái)填充Date對(duì)象。

java.util.Date是一個(gè)表示日期和時(shí)間的類,代表了系統(tǒng)特定的時(shí)間戳。它是按照UTC時(shí)間顯示的,可以精確到毫秒,源碼內(nèi)部使用long類型進(jìn)行時(shí)間的存儲(chǔ)。我們要注意與java.sql.Date區(qū)分,后者是用在數(shù)據(jù)庫(kù)中的類,且是按照本地時(shí)區(qū)顯示的。Date對(duì)象表示的時(shí)間,其默認(rèn)順序是星期、月、日、小時(shí)、分、秒、年。

2. 構(gòu)造方法

java.util.Date類給我們提供了多個(gè)構(gòu)造方法,如下圖所示:

但是一般在開(kāi)發(fā)時(shí),我們常用的也沒(méi)有這么多,一般使用時(shí)如下形式:

  • Date():創(chuàng)建Date對(duì)象并初始化,該對(duì)象可以獲取本地的當(dāng)前時(shí)間,該時(shí)間會(huì)精確到毫秒。
  • Date(long date):構(gòu)造一個(gè)Date對(duì)象,并接受一個(gè)從1970年1月1日起的毫秒數(shù)作為參數(shù)。

3. 常用API方法

當(dāng)我們構(gòu)造出來(lái)一個(gè)Date對(duì)象之后,就可以使用它的一些API方法進(jìn)行時(shí)間的操作了,這些常用的API方法如下:

序號(hào)方法和描述
boolean after(Date date)若調(diào)用該方法的Date對(duì)象,在指定的日期之后,則返回true,否則返回false。
boolean before(Date date)若調(diào)用此方法的Date對(duì)象,在指定的日期之前,則返回true,否則返回false
int compareTo(Date date)比較調(diào)用此方法的Date對(duì)象和指定的日期。若兩者相等則返回0,若該對(duì)象在指定日期之前則返回負(fù)數(shù),若該對(duì)象在指定日期之后則返回正數(shù)。
boolean equals(Object date)若調(diào)用該方法的Date對(duì)象,和指定日期相等時(shí)則返回true,否則返回false。
long getTime( )返回自1970年1月1日 00:00:00 GMT以來(lái)的毫秒數(shù)。
void setTime(long time)用從1970年1月1日00:00:00 以后的time毫秒數(shù),設(shè)置時(shí)間和日期。
String toString( )把該Date對(duì)象轉(zhuǎn)換成dow mon dd hh:mm:ss zzz yyyy格式的字符串,其中dow是指一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

4. 使用方法

4.1 基本使用

接下來(lái)我們先通過(guò)一個(gè)簡(jiǎn)單的案例,來(lái)演示一下Date的基本用法。

import java.util.Date;
/**
 * @author
 */
public class Demo01 {
    public static void main(String[] args) {
	//獲取當(dāng)前時(shí)間的時(shí)間戳
	long currentTimeMillis = System.currentTimeMillis();
	System.out.println("時(shí)間戳="+currentTimeMillis);
	//獲取當(dāng)前時(shí)間對(duì)象
	Date date=new Date();
	//Sat Feb 11 12:04:03 IRKT 2023
	System.out.println("當(dāng)前時(shí)間="+date);
	//轉(zhuǎn)為字符串:Sat Feb 11 12:04:03 IRKT 2023
	System.out.println("當(dāng)前時(shí)間="+date.toString());
	//轉(zhuǎn)換為本地時(shí)區(qū):2023年2月11日 下午12:04:03
	System.out.println("當(dāng)前時(shí)間,Locale="+date.toLocaleString());
	//轉(zhuǎn)換為GMT時(shí)區(qū):11 Feb 2023 04:04:03 GMT
	System.out.println("當(dāng)前時(shí)間,GMT="+date.toGMTString());
    }
}

如果我們想獲取當(dāng)前時(shí)間的時(shí)間戳,可以使用System.currentTimeMillis()方法。構(gòu)造出Date對(duì)象之后,我們可以直接打印該對(duì)象,就能展示出當(dāng)前時(shí)間,但是這個(gè)格式并不一定符合我們中國(guó)人的閱讀習(xí)慣,后面我們可以對(duì)日期進(jìn)行格式化操作。

4.2 其他用法

除了上面這些基本用法之外,Date還有其他的一些用法。

import java.util.Date;
/**
 * @author
 */
public class Demo01 {
    public static void main(String[] args) {
	//獲取當(dāng)前時(shí)間對(duì)象
	Date date=new Date();
	//獲取年月日
	System.out.println("年="+(date.getYear() + 1900)); // 必須加上1900
        System.out.println("月="+(date.getMonth() + 1)); // 0~11,必須加上1
        System.out.println("日="+date.getDate()); // 1~31,不能加1
        System.out.println("時(shí)="+date.getHours()); // 0~23
        System.out.println("分="+date.getMinutes()); // 0~59,不能加1
        System.out.println("秒="+date.getSeconds()); // 0~59,不能加1
        System.out.println("時(shí)間戳="+date.getTime()); // 時(shí)間戳,毫秒值
	//計(jì)算自己已經(jīng)活了多少天,1990年01月31日
	//構(gòu)造對(duì)象的另一個(gè)方法,已過(guò)時(shí)。year:要減去1900,月份從0開(kāi)始,0-11;日期是1-31
        Date d1 =  new Date(1990-1900, 2-1, 31);
        Date d2 = new Date();
        long time = d2.getTime() - d1.getTime();
        System.out.println("已活天數(shù)="+time/1000/60/60/24);
    }
}

另外我們還要注意,getYear()方法返回的年份必須加上1900;getMonth()方法返回的月份是011,分別表示112月,所以要加1;而getDate()方法返回的日期范圍是1~31,就不能加1。

在打印本地時(shí)區(qū)表示的日期和時(shí)間時(shí),不同的計(jì)算機(jī)可能會(huì)有不同的展示結(jié)果,后面我們可以使用SimpleDateFormat設(shè)置出我們想要的日期時(shí)間格式。

4.3 統(tǒng)計(jì)時(shí)間差

有時(shí)候我們要統(tǒng)計(jì)某個(gè)功能的執(zhí)行時(shí)間,此時(shí)就可以用該功能結(jié)束時(shí)的時(shí)間,減去開(kāi)始時(shí)的時(shí)間,得到一個(gè)時(shí)間差,這就是該功能的執(zhí)行時(shí)間。

import java.util.Date;
/**
 * @author
 */
public class Demo03 {
    public static void main(String[] args) {
	//獲取當(dāng)前時(shí)間對(duì)象
	//開(kāi)始時(shí)間
	Date startDate=new Date();
	for(int i=0;i<100000;i++) {
            System.out.println("循環(huán)次數(shù)"+i);
	}
	//結(jié)束時(shí)間
	Date endDate=new Date();
	//計(jì)算時(shí)間差
        long time = endDate.getTime() - startDate.getTime();
        System.out.println("10w次循環(huán)的執(zhí)行時(shí)間是 "+time+" 毫秒");
    }
}

三. Calendar日歷類

1. 簡(jiǎn)介

Calendar類是Java時(shí)間類Date的擴(kuò)展。相比Date,它擁有更強(qiáng)大的功能,主要是多了可以做簡(jiǎn)單日期和時(shí)間運(yùn)算的功能,且在實(shí)現(xiàn)方式上也比Date類更復(fù)雜一些。Calendar可以用來(lái)計(jì)算日期,比如說(shuō)計(jì)算下個(gè)月的日期,或者兩個(gè)月前的日期等。

Calendar類是一個(gè)抽象類,我們?cè)趯?shí)際使用時(shí)需要實(shí)現(xiàn)特定的子類,一般使用getInstance()方法創(chuàng)建即可。Calendar類有幾個(gè)主要的子類,包括java.util.GregorianCalendar和java.util.TimeZone。其中GregorianCalendar類提供了標(biāo)準(zhǔn)的日歷系統(tǒng),可以用來(lái)計(jì)算未來(lái)或過(guò)去某天的日期。TimeZone類則可以用來(lái)在不同的時(shí)區(qū)之間,轉(zhuǎn)換日期和時(shí)間。

2. Calendar常量字段

Calendar中有以下幾個(gè)常用的常量字段,用于表示不同的意義。

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意義完全相同
Calendar.HOUR12小時(shí)制的小時(shí)
Calendar.HOUR_OF_DAY24小時(shí)制的小時(shí)
Calendar.MINUTE分鐘
Calendar.SECOND
Calendar.DAY_OF_WEEK星期幾

3. Calendar常用方法

除了以上常用的常量字段之外,Calendar還有一些常用的方法,如下表所示:

方法描述
void add(int field, int amount)根據(jù)日歷的規(guī)則,為給定的日歷字段 field 添加或減去指定的時(shí)間量 amount
boolean after(Object when)判斷此 Calendar 表示的時(shí)間是否在指定時(shí)間 when 之后,并返回判斷結(jié)果
boolean before(Object when)判斷此 Calendar 表示的時(shí)間是否在指定時(shí)間 when 之前,并返回判斷結(jié)果
void clear()清空 Calendar 中的日期時(shí)間值
int compareTo(Calendar anotherCalendar)比較兩個(gè) Calendar 對(duì)象表示的時(shí)間值(從格林威治時(shí)間 1970 年 01 月 01 日 00 時(shí) 00 分 00 秒至現(xiàn)在的毫秒偏移量),大則返回 1,小則返回 -1,相等返回 0
int get(int field)返回指定日歷字段的值
int getActualMaximum(int field)返回指定日歷字段可能擁有的最大值
int getActualMinimum(int field)返回指定日歷字段可能擁有的最小值
int getFirstDayOfWeek()獲取一星期的第一天。根據(jù)不同的國(guó)家地區(qū),返回不同的值
static Calendar getInstance()使用默認(rèn)時(shí)區(qū)和語(yǔ)言壞境獲得一個(gè)日歷
static Calendar getInstance(TimeZone zone)使用指定時(shí)區(qū)和默認(rèn)語(yǔ)言環(huán)境獲得一個(gè)日歷
static Calendar getInstance(TimeZone zone,Locale aLocale)使用指定時(shí)區(qū)和語(yǔ)言環(huán)境獲得一個(gè)日歷
Date getTime()返回一個(gè)表示此 Calendar 時(shí)間值(從格林威治時(shí)間1970 年 01 月 01 日 00 時(shí) 00 分 00 秒至現(xiàn)在的毫秒偏移量)的 Date 對(duì)象
long getTimeInMillis()返回此 Calendar 的時(shí)間值,以毫秒為單位
void set(int field, int value)為指定的日歷字段設(shè)置給定值
void set(int year, int month, int date)設(shè)置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay,int minute, int second)設(shè)置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)設(shè)置一星期的第一天是哪一天
void setTimeInMillis(long millis)用給定的 long 值設(shè)置此 Calendar 的當(dāng)前時(shí)間值

Calendar對(duì)象可以調(diào)用set()方法將日歷翻到任何一個(gè)時(shí)間,當(dāng)參數(shù) year取負(fù)數(shù)時(shí)表示是公元前。調(diào)用 get()方法可以獲取年、月、日等時(shí)間信息,field參數(shù)的值是前面講過(guò)的Calendar靜態(tài)常量。

4. 構(gòu)建Calendar對(duì)象

Calendar類是抽象類,所以我們不能通過(guò)new的方式來(lái)構(gòu)建Calendar對(duì)象。在實(shí)際使用時(shí),我們一般是要實(shí)現(xiàn)特定的子類,經(jīng)常是使用getInstance()方法進(jìn)行創(chuàng)建。

import java.util.Calendar;
/**
 * @author
 */
public class Demo04 {
    public static void main(String[] args) {
	//默認(rèn)是當(dāng)前日期
	Calendar c1 = Calendar.getInstance();
	System.out.println("c1="+c1);	
	//創(chuàng)建一個(gè)代表2023年2月2日的Calendar對(duì)象
	Calendar c2 = Calendar.getInstance();
	c2.set(2023, 2-1, 2);
	System.out.println("c2="+c2);
    }
}

5. 獲取當(dāng)前時(shí)間

獲取到Calendar對(duì)象之后,我們可以獲取到當(dāng)前日期對(duì)象的年月日時(shí)分秒等信息。

import java.util.Calendar;
/**
 * @author
 */
public class Demo05 {
    public static void main(String[] args) {
	// 獲取當(dāng)前時(shí)間
        Calendar c = Calendar.getInstance();
        int y = c.get(Calendar.YEAR);
        //月份要加1
        int m = 1 + c.get(Calendar.MONTH);
        int d = c.get(Calendar.DAY_OF_MONTH);
        int w = c.get(Calendar.DAY_OF_WEEK);
        int hh = c.get(Calendar.HOUR_OF_DAY);
        int mm = c.get(Calendar.MINUTE);
        int ss = c.get(Calendar.SECOND);
        int ms = c.get(Calendar.MILLISECOND);
        //2023-2-11 7 18:10:59.847
        System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);
    }
}

我們要注意,Calendar是通過(guò)get()方法獲取年月日等信息的,其中返回的年份不必轉(zhuǎn)換,返回的月份仍要加1,返回的星期要特別注意,1~7分別表示周日、周一、……周六。

6. 設(shè)置時(shí)間

我們通過(guò)Calendar.getInstance()方法獲取到Calendar對(duì)象后,獲取到的其實(shí)就是當(dāng)前時(shí)間。如果我們想設(shè)置某個(gè)特定的日期和時(shí)間,需要先用clear()方法清除掉之前所有的字段。

import java.util.Calendar;
/**
 * @author
 */
public class Demo06 {
    public static void main(String[] args) {
	// 設(shè)置時(shí)間
        Calendar c = Calendar.getInstance();
        // 清除所有
        c.clear();
        // 設(shè)置2023年
        c.set(Calendar.YEAR, 2023);
        // 設(shè)置2月(0~11)
        c.set(Calendar.MONTH, 1);
        // 設(shè)置2日
        c.set(Calendar.DATE, 2);
        // 設(shè)置時(shí)間
        c.set(Calendar.HOUR_OF_DAY, 21);
        c.set(Calendar.MINUTE, 22);
        c.set(Calendar.SECOND, 23);
        //Thu Feb 02 21:22:23 IRKT 2023
        System.out.println("date="+c.getTime());
    }
}

我們可以利用Calendar.getTime()方法,將一個(gè)Calendar對(duì)象轉(zhuǎn)換成Date對(duì)象,后面我們就可以用SimpleDateFormat進(jìn)行格式化操作了。

四. GregorianCalendar類

1. 簡(jiǎn)介

Java中除了有Calendar類實(shí)現(xiàn)了公歷日歷,還有一個(gè)子類GregorianCalendar。在GregorianCalendar類中,定義了兩個(gè)字段:AD和BC,分別代表公歷定義的兩個(gè)時(shí)代。GregorianCalendar中的屬性和方法與Calendar類似,就不再贅述了,接下來(lái)我們直接通過(guò)一個(gè)案例來(lái)進(jìn)行展示其用法。

2. 基本用法

這里我們?cè)O(shè)計(jì)一個(gè)案例,來(lái)判斷當(dāng)前年份是閏年還是平年。

import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * @author 
 */
public class Demo05 {
    public static void main(String[] args) {
	//定義一個(gè)月份數(shù)組
	String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
	int year;	
	// 使用當(dāng)前時(shí)間和日期,初始化Gregorian日歷對(duì)象,默認(rèn)為本地時(shí)間和時(shí)區(qū)
	GregorianCalendar gcalendar = new GregorianCalendar();
	// 顯示當(dāng)前時(shí)間和日期的信息
	System.out.print("Date:");
	System.out.print(months[gcalendar.get(Calendar.MONTH)]);
	System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
	System.out.println(year = gcalendar.get(Calendar.YEAR));
	System.out.print("Time:");
	System.out.print(gcalendar.get(Calendar.HOUR) + ":");
	System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
	System.out.println(gcalendar.get(Calendar.SECOND));
	//判斷當(dāng)前年份是否為閏年
	if (gcalendar.isLeapYear(year)) {
            System.out.println("當(dāng)前年份是閏年");
        } else {
            System.out.println("當(dāng)前年份是平年");
	}
    }
}

五. 結(jié)語(yǔ)

至此,就把Date和擴(kuò)展類Calendar給大家講解完畢,今天的內(nèi)容其實(shí)并不難,大家需要把一些常用的構(gòu)造方式及方法、常量記一下即可。

以上就是一文帶你熟練掌握J(rèn)ava中的日期時(shí)間相關(guān)類的詳細(xì)內(nèi)容,更多關(guān)于Java 日期時(shí)間相關(guān)類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 由淺到深帶你詳談Java實(shí)現(xiàn)數(shù)組擴(kuò)容的三種方式

    由淺到深帶你詳談Java實(shí)現(xiàn)數(shù)組擴(kuò)容的三種方式

    這篇文章主要詳細(xì)介紹了Java實(shí)現(xiàn)數(shù)組擴(kuò)容的三種方式,新建一個(gè)數(shù)組,把原來(lái)數(shù)組的內(nèi)容搬到新數(shù)組中,使用system.arraycopy(),使用java.util.Arrays.copyOf()這三種方式,具有一定的參考價(jià)值,需要的朋友可以借鑒一下
    2023-06-06
  • Java 多用戶登錄限制的實(shí)現(xiàn)方法

    Java 多用戶登錄限制的實(shí)現(xiàn)方法

    最近沒(méi)有事情做,閑的發(fā)呆,于是寫(xiě)個(gè)東東練練手。這篇文章主要介紹了Java 多用戶登錄限制的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 使用MyBatisPlus自動(dòng)生成代碼后tomcat運(yùn)行報(bào)錯(cuò)的問(wèn)題及解決方法

    使用MyBatisPlus自動(dòng)生成代碼后tomcat運(yùn)行報(bào)錯(cuò)的問(wèn)題及解決方法

    這篇文章主要介紹了使用MyBatisPlus自動(dòng)生成代碼后tomcat運(yùn)行報(bào)錯(cuò)的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談java是如何做資源回收補(bǔ)救的

    淺談java是如何做資源回收補(bǔ)救的

    這篇文章主要介紹了淺談java是如何做資源回收補(bǔ)救的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java異步線程中的CompletableFuture與@Async詳解

    Java異步線程中的CompletableFuture與@Async詳解

    這篇文章主要介紹了Java異步線程中的CompletableFuture與@Async詳解,CompletableFuture是java中提供的一個(gè)異步執(zhí)行類,@Async是Spring提供的異步執(zhí)行方法,當(dāng)調(diào)用方法單獨(dú)開(kāi)啟一個(gè)線程進(jìn)行調(diào)用,需要的朋友可以參考下
    2024-01-01
  • 利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體

    利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體

    這篇文章主要介紹了利用feign調(diào)用返回object類型轉(zhuǎn)換成實(shí)體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java.sql.SQLException問(wèn)題解決以及注意事項(xiàng)

    java.sql.SQLException問(wèn)題解決以及注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于java.sql.SQLException問(wèn)題解決以及注意事項(xiàng)的相關(guān)資料,這個(gè)問(wèn)題其實(shí)很好解決,文中通過(guò)圖文將解決的辦法介紹的很詳細(xì),需要的朋友可以參考下
    2023-07-07
  • java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序判斷

    java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序判斷

    對(duì)靜態(tài)代碼塊以及構(gòu)造函數(shù)的執(zhí)行先后順序,一直很迷惑,直到最近看到一段代碼,發(fā)現(xiàn)終于弄懂了,所以這篇文章主要給大家介紹了關(guān)于如何判斷java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解

    SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解

    這篇文章主要通過(guò)示例為大家詳細(xì)介紹一下介紹了SpringBoot參數(shù)校驗(yàn)中@Valid的使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之線段樹(shù)中的懶操作詳解

    Java數(shù)據(jù)結(jié)構(gòu)之線段樹(shù)中的懶操作詳解

    對(duì)于線段樹(shù),若要求對(duì)區(qū)間中的所有點(diǎn)都進(jìn)行更新,可以引入懶操作。懶操作包括區(qū)間更新和區(qū)間查詢操作。本文將通過(guò)一個(gè)示例和大家詳細(xì)聊聊線段樹(shù)中的懶操作,需要的可以參考一下
    2022-10-10

最新評(píng)論