Java中Calendar類的一些常用方法小結(jié)
原理簡介
Java中提供了Calendar這個專門用于對日歷進(jìn)行操作的類,那么這個類有什么特殊的地方呢,首先我們來看Calendar的聲明:
public abstract class Calendar
extends Objectimplements Serializable, Cloneable, Comparable<Calendar>{}
該類被abstract所修飾,說明該類是一個抽象類,所以不能直接通過new該類對象來進(jìn)行實(shí)例化,為此Calendar類提供了兩種實(shí)例化方式:
方法1:通過創(chuàng)建其子類的對象(GregorianCalendar)的對象來進(jìn)行實(shí)例化
方法2:調(diào)用其靜態(tài)方法getInstance()方法來進(jìn)行實(shí)例化,以獲得此類型的一個通用的對象,getInstance方法返回一個Calendar對象(該對象為Calendar的子類所創(chuàng)建的對象),其日歷字段已由當(dāng)前日期和時間初始化(通常都選擇方法2來進(jìn)行實(shí)例化。)
Calendar nowTime = Calendar.getInstance();//使用默認(rèn)時區(qū)和語言環(huán)境獲得一個日歷
?Calendar 類常用方法的記錄:
獲取時間
// 使用默認(rèn)時區(qū)和語言環(huán)境獲得一個日歷
Calendar cal = Calendar.getInstance();
// 賦值時年月日時分秒常用的6個值,注意月份下標(biāo)從0開始,所以取月份要+1
System.out.println("年:" + cal.get(Calendar.YEAR));
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("時:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + cal.get(Calendar.MINUTE));
System.out.println("秒:" + cal.get(Calendar.SECOND));
今天是 2018 年 2 月 12 日,運(yùn)行結(jié)果:
年:2018
月:2
日:12
時:15
分:57
秒:39
設(shè)置時間
月份的下標(biāo)從 0 開始,設(shè)置時同樣需要注意,比如我們設(shè)置為 2 月 15 日除夕當(dāng)晚的倒計(jì)時的最后一秒: 2018-02-15 23:59:59
可以這樣:
Calendar cal = Calendar.getInstance();
// 如果想設(shè)置為某個日期,可以一次設(shè)置年月日時分秒,由于月份下標(biāo)從0開始賦值月份要-1
// cal.set(year, month, date, hourOfDay, minute, second);
cal.set(2018, 1, 15, 23, 59, 59);
或者也可以單個字段一一設(shè)置:
// 或者6個字段分別進(jìn)行設(shè)置,由于月份下標(biāo)從0開始賦值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());
打印的時間結(jié)果為:
? ? Thu Feb 15 23:59:59 CST 2018
時間計(jì)算
add方法:
比如在除夕當(dāng)晚最后一秒,add 一秒:
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.set(2018, 1, 15, 23, 59, 59);
cal.add(Calendar.SECOND, 1);
System.out.println(cal.getTime());
打印時間結(jié)果如下,日期會自動進(jìn)入下一天:
? ? Thu Feb 15 23:59:59 CST 2018
? ? Fri Feb 16 00:00:00 CST 2018
再比如 1 月 31 號的時候,月份加一,會出現(xiàn)怎樣結(jié)果:
Calendar cal = Calendar.getInstance();
cal.set(2018, 1, 31, 8, 0, 0);
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, 1);
System.out.println(cal.getTime());
運(yùn)行結(jié)果:
? ? Wed Jan 31 08:00:00 CST 2018
? ? Wed Feb 28 08:00:00 CST 2018
總結(jié)
到此這篇關(guān)于Java中Calendar類的一些常用方法的文章就介紹到這了,更多相關(guān)Java?Calendar類常用方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring的請求映射handlerMapping以及原理詳解
這篇文章主要介紹了Spring的請求映射handlerMapping以及原理詳解,我們每次發(fā)請求,它到底是怎么找到我們哪個方法來去處理這個請求,因?yàn)槲覀冎浪械恼埱筮^來都會來到DispatcherServlet,springboot底層還是使用的是springMVC,需要的朋友可以參考下2023-08-08
關(guān)于Spring自定義XML schema 擴(kuò)展的問題(Spring面試高頻題)
今天給大家分享一道spring高頻率面試題關(guān)于Spring自定義XML schema 擴(kuò)展的問題,今天以spring整合dubbo的實(shí)例給大家詳細(xì)講解下,感興趣的朋友跟隨小編一起看看吧2021-05-05
教你Java中的Lock鎖底層AQS到底是如何實(shí)現(xiàn)的
本文是基于ReentrantLock來講解,ReentrantLock加鎖只是對AQS的api的調(diào)用,底層的鎖的狀態(tài)(state)和其他線程等待(Node雙向鏈表)的過程其實(shí)是由AQS來維護(hù)的,對Java?Lock鎖AQS實(shí)現(xiàn)過程感興趣的朋友一起看看吧2022-05-05
IDEA提示內(nèi)存不足 low memory的完美解決方法(親測好用)
這篇文章主要介紹了IDEA提示內(nèi)存不足 low memory的完美解決方法(親測好用),這里以IDEA2022版本為例,在IDE中 幫助(help)–>change memory setting(改變內(nèi)存設(shè)置),具體設(shè)置辦法文中給大家詳細(xì)講解,需要的朋友可以參考下2023-01-01
java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解
這篇文章主要介紹了java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12

