最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java時(shí)間 java.util.Calendar深入分析

 更新時(shí)間:2017年02月19日 15:40:01   投稿:lqh  
這篇文章主要介紹了java時(shí)間 java.util.Calendar深入分析的相關(guān)資料,需要的朋友可以參考下

java.util.Calendar

在Java中時(shí)間的類有幾個(gè),但是隨著Date被漸漸禁用,其中的方法慢慢打上了叉號(hào),剩下能用的函數(shù)在Calendar中都已實(shí)現(xiàn),而Calendar的子類GregorianCalendar又過(guò)于深入特殊日歷的研究,平時(shí)我們并不會(huì)用到這個(gè)子類。我們可以相信Calendar類會(huì)是以后的主流時(shí)間類,下面我們就一起看一下Calendar類的詳細(xì)內(nèi)容,如果有錯(cuò)誤歡迎大家指正。

(一) 實(shí)例化

Calendar類是一個(gè)抽象類,是不能實(shí)例化的,那么這個(gè)類得到一個(gè)日歷實(shí)例的方法有這么兩種:

 Calendar calendar = Calendar.getInstance(TimeZone zone , Locale locale); 

通過(guò)調(diào)用getInstance方法,選擇默認(rèn)的Timezone和Locale屬性,從而返回一個(gè)日歷,也可以在其中加上參數(shù)Timezone或Locale從而選擇地域地點(diǎn),具體的參數(shù)要去看java.util.Timezone,java.util.Locale這兩個(gè)包,一般的默認(rèn)時(shí)間是公用的時(shí)間我們其實(shí)并不需要改動(dòng)。

除此之外,還有一個(gè)能夠?qū)嵗姆椒?。沒什么稀奇的,java的老套路用子類來(lái)實(shí)例化。Calendar的子類只有一個(gè)——GregorianCalendar,翻譯過(guò)來(lái)就是公歷的意思,這個(gè)GregorianCalendar我們以后還會(huì)單講。實(shí)例化的第二種方式如下:

Calendar calendar = new GregorianCalendar();

(二) 類變量

Calendar中變量基本都用final限定,這些變量將年份,月份,小時(shí),上下午等等所有的時(shí)間內(nèi)容全部包括了。百度上一找一大堆,這種具體要用的時(shí)候最好還是看API,我這里姑且簡(jiǎn)要粘貼一份:

calendar.get(Calendar.YEAR); 
calendar.get(Calendar.MONTH); // 月份從0開始 
calendar.get(Calendar.DAY_OF_MONTH);  
calendar.get(Calendar.DAY_OF_WEEK); 
calendar.get(Calendar.WEEK_OF_YEAR); 
calendar.get(Calendar.WEEK_OF_MONTH); 
calendar.get(Calendar.HOUR);    // 12小時(shí)
calendar.get(Calendar.HOUR_OF_DAY); // 24小時(shí) 
calendar.get(Calendar.MINUTE); 
calendar.get(Calendar.SECOND); 
calendar.get(Calendar.MILLISECOND); 

這些值在jdk的源碼中都是final變量,既然是int static final修飾,也就是說(shuō)明這些變量都是有int類型的初始值的。的確如此,Calendar類中為這些變量依次編號(hào),作為一些函數(shù)傳入?yún)?shù)時(shí)的范圍判斷。那么一不小心有可能會(huì)出現(xiàn)這種情況,比如以下代碼:

System.out.println(Calendar.DAY_OF_MOUTH);

輸出的是5,盡管今天并不是這個(gè)月的5號(hào)。這其實(shí)是一個(gè)錯(cuò)誤,其實(shí)你輸出的是這個(gè)類中DAY_OF_MOUTH的初始值5,如果你要表示當(dāng)前月的日期,一定要將類實(shí)例出對(duì)象,但是在類的變量可以直接點(diǎn)出來(lái)的類中,這種錯(cuò)誤的發(fā)生還是很常見的。正確的方法應(yīng)該用get()方法來(lái)獲取(calendar是我們實(shí)例的對(duì)象):

System.out.println(calendar.get(Calendar.DAY_OF_MOUTH));

(三) compareTo() after() before() 函數(shù)

compareTo(Calendar othercalendar),返回int值,如果對(duì)象的時(shí)間在參數(shù)時(shí)間之后返回一個(gè)大于0的數(shù)字,否則返回一個(gè)小于0的數(shù)字,特別的,如果時(shí)間相同返回0,我覺得這個(gè)方法的實(shí)現(xiàn)可能直接是返回了毫秒數(shù)做個(gè)差(感覺自己推測(cè)好有道理…),毫秒的差值來(lái)做返回值。

after(Calendar othercalendar),before(Calendar othercalendar),這兩個(gè)函數(shù)也很好猜測(cè),返回的是boolean值,after()函數(shù)如果時(shí)間在參數(shù)之后返回正值,before()函數(shù)時(shí)間在參數(shù)之前返回正值。

Calendar calendar = Calendar.getInstance();
Calendar calendarother = Calendar.getInstance();
calendarother.add(Calendar.DATE, -20);

if(calendar.after(calendarother))
  System.out.println("after");

calendarother.add(Calendar.DATE, 100);

if(calendar.before(calendarother))
  System.out.println("before");
if(calendar.compareTo(calendarother)>0)
    System.out.println(calendar.getTime()+">"+calendarother.getTime());

輸出的結(jié)果是:

after 
before 
Sun Jan 11 21:19:49 GMT+08:00 1970>Thu Jan 01 00:00:00 GMT+08:00 1970

(四) get() add() set() setTime() 函數(shù)

上面的例子中出現(xiàn)了add(int field, int amount)這個(gè)函數(shù),這個(gè)函數(shù)的功能比較強(qiáng)大,可以對(duì)第一個(gè)參數(shù)的值進(jìn)行加減,從而修改這個(gè)日歷實(shí)體中對(duì)應(yīng)項(xiàng)的數(shù)值。

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
System.out.println(calendar.getTime());//輸出的日期是當(dāng)前日期的前一天,其他所有的都不變

get(int field)這個(gè)沒有什么好說(shuō)的,把要取得值放進(jìn)去顯示出來(lái),如是而已,順便提一句getTimeInMillis(),返回毫秒數(shù),實(shí)際應(yīng)用中,這個(gè)毫秒數(shù)用的還是比較多的。

set()方法有很多組參數(shù)輸入方式,寫的上就看得懂,setTime()這個(gè)函數(shù)將一個(gè)Date對(duì)象放進(jìn)去,返回一個(gè)按照Date的日期設(shè)置日歷。另外特殊需要注意的地方就是,月份是從0開始算的,把月份設(shè)置為0實(shí)際是一月份,設(shè)置為1實(shí)際為二月份,一周的第1天是星期日,第7天是星期六。

calendar.get(Calendar.DATE);
calendar.getTimeInMillis();

calendar.set(field, value);
calendar.set(year, month, date);//月份是從0開始,下同
calendar.set(year, month, date, hourOfDay, minute);
calendar.set(year, month, date, hourOfDay, minute, second);

calendar.setTime(Date date);//Date對(duì)象

(五) getTime() clear() isSet() 函數(shù)

getTime()函數(shù)是返回一個(gè)時(shí)間,大概是這個(gè)格式的

Sun Jan 11 21:19:49 GMT+08:00 1970

可以用時(shí)間格式化的方法來(lái)變成自己喜歡的樣子,具體看我的另外的博客,這個(gè)函數(shù)也沒有太多的槽點(diǎn)。clear()函數(shù)在無(wú)參數(shù)的情況下是對(duì)對(duì)象中的所有變量進(jìn)行清空,清空后的時(shí)間直接打回原形,變?yōu)?/p>

Thu Jan 01 00:00:00 GMT+08:00 1970

clear()也可以附帶上參數(shù)int field,表示單單清除這個(gè)數(shù)值:

calendar.clear(Calendar.YEAR);
System.out.println(calendar.getTime());

上述代碼最后顯示的年份是1970年(不可能清除成0000年…),其他的也可以以此類推。
isSet()方法確定日歷字段是否已經(jīng)設(shè)置了一個(gè)值,有些值會(huì)因?yàn)間et方法觸發(fā)計(jì)算而被設(shè)置,很多的時(shí)候,只要進(jìn)行了初始化,很多值已經(jīng)被設(shè)置了,但是作為一個(gè)boolean返回值的函數(shù),檢測(cè)的時(shí)候我們相信還是會(huì)起到作用的。

if(calendar.isSet(Calendar.DATE))

(六) 總結(jié)

Calendar類正如其名,可以實(shí)現(xiàn)一個(gè)日歷,對(duì)其進(jìn)行操作且功能較為完整。如果你只是需要一個(gè)時(shí)間,這個(gè)類并不一定比new Date()能快多少,但是對(duì)于一些細(xì)節(jié)的操作,還是有很多值得我們學(xué)習(xí)的地方。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Spring執(zhí)行流程和Bean的生命周期詳解

    Spring執(zhí)行流程和Bean的生命周期詳解

    這篇文章主要介紹了Spring執(zhí)行流程和Bean的生命周期詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • SpringCloud Zuul過(guò)濾器和谷歌Gauva實(shí)現(xiàn)限流

    SpringCloud Zuul過(guò)濾器和谷歌Gauva實(shí)現(xiàn)限流

    這篇文章主要介紹了SpringCloud Zuul過(guò)濾器和谷歌Gauva實(shí)現(xiàn)限流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot實(shí)現(xiàn)接口統(tǒng)一前綴

    SpringBoot實(shí)現(xiàn)接口統(tǒng)一前綴

    本文主要介紹了SpringBoot實(shí)現(xiàn)接口統(tǒng)一前綴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • MAC算法之消息摘要算法HmacMD5的實(shí)現(xiàn)

    MAC算法之消息摘要算法HmacMD5的實(shí)現(xiàn)

    這篇文章主要介紹了MAC算法之消息摘要算法HmacMD5的實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)例,幫助大家學(xué)習(xí)理解這部分知識(shí),需要的朋友可以參考下
    2017-08-08
  • springboot連接redis并動(dòng)態(tài)切換database的實(shí)現(xiàn)方法

    springboot連接redis并動(dòng)態(tài)切換database的實(shí)現(xiàn)方法

    這篇文章主要介紹了springboot連接redis并動(dòng)態(tài)切換database,本文主為通過(guò)修改ConnectionFactory從而達(dá)到動(dòng)態(tài)切換database的效果,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • eclipse 如何創(chuàng)建 user library 方法詳解

    eclipse 如何創(chuàng)建 user library 方法詳解

    這篇文章主要介紹了eclipse 如何創(chuàng)建 user library 方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Spring事務(wù)管理詳細(xì)講解

    Spring事務(wù)管理詳細(xì)講解

    事務(wù)的作用就是為了保證用戶的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就?回退到事務(wù)開始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring?Boot開發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)
    2022-10-10
  • Java中的OpenTracing使用實(shí)例

    Java中的OpenTracing使用實(shí)例

    這篇文章主要介紹了Java中的OpenTracing使用實(shí)例,主要的OpenTracing API將所有主要組件聲明為接口以及輔助類,例如Tracer,Span,SpanContext,Scope,ScopeManager,Format(用映射定義通用的SpanContext注入和提取格式),需要的朋友可以參考下
    2024-01-01
  • spring中的懶加載詳細(xì)解讀

    spring中的懶加載詳細(xì)解讀

    這篇文章主要介紹了spring中的懶加載詳細(xì)解讀,如果某個(gè)Bean再程序運(yùn)行周期中都可能不會(huì)被適用,那么可以設(shè)定該Bean為懶加載,優(yōu)勢(shì)是盡量節(jié)省了服務(wù)器的資源,缺點(diǎn)是可能會(huì)導(dǎo)致某個(gè)相應(yīng)的時(shí)間增加,需要的朋友可以參考下
    2023-10-10
  • SpringBoot如何讀取配置文件參數(shù)并全局使用

    SpringBoot如何讀取配置文件參數(shù)并全局使用

    這篇文章主要介紹了SpringBoot如何讀取配置文件參數(shù)并全局使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

比如县| 廉江市| 弥勒县| 宿州市| 喜德县| 崇阳县| 汤阴县| 五常市| 沧州市| 福贡县| 泾源县| 博客| 峨眉山市| 中江县| 东至县| 财经| 健康| 镇平县| 遂昌县| 辽阳市| 潞西市| 介休市| 瓮安县| 乐安县| 桦川县| 会东县| 平乡县| 钟祥市| 临夏市| 十堰市| 扎兰屯市| 邵阳县| 屏东市| 宁波市| 嘉峪关市| 临武县| 吴堡县| 九江市| 宣汉县| 柞水县| 白山市|