成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Calendar工具類(lèi)對(duì)跨年的星期的處理個(gè)人總結(jié)

王笑朝 / 2595人閱讀

摘要:在設(shè)置或獲得或字段時(shí),必須確定一個(gè)月或一年的第一個(gè)星期,以此作為參考點(diǎn)。一個(gè)月或一年的第一個(gè)星期被確定為開(kāi)始于的最早七天,它最少包含那一個(gè)月或一年的天數(shù)。例如,特定子類(lèi)可能將某一年第個(gè)星期之前的那個(gè)星期指定為前一年的第個(gè)星期。

Calendar工具類(lèi)解釋

首先解釋下Calendar工具類(lèi)的作用。根據(jù)API的解釋?zhuān)珻alendar 類(lèi)是一個(gè)抽象類(lèi),它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些基礎(chǔ)方法,其中瞬間可用毫秒值來(lái)表示,它是距歷元(即格林威治標(biāo)準(zhǔn)時(shí)間 1970 年 1 月 1 日的 00:00:00.000,格里高利歷)的偏移量。
那么Calendar工具類(lèi)是如何界定跨年或者跨月份的星期定義呢?舉個(gè)例子:

如上圖所示,2020年1月1日是星期三,那么它是算2020年的第一周呢還是2019年的最后一周?諸如如此的跨年份或者跨月份導(dǎo)致星期界定不明的情況,Calendar工具類(lèi)提供了兩個(gè)方法去個(gè)性化定義此類(lèi)問(wèn)題,一個(gè)方法是getFirstDayOfWeek(),另一個(gè)方法是getMinimalDaysInFirstWeek(),這兩個(gè)方法相輔相成,共同完成對(duì)此類(lèi)問(wèn)題的定義。下面對(duì)這兩個(gè)方法進(jìn)行詳細(xì)介紹。

getFirstDayOfWeek()和getMinimalDaysInFirstWeek()方法

getFirstDayOfWeek()方法官方API是這么解釋的:獲取一星期的第一天。而getMinimalDaysInFirstWeek()方法官方API是這么定義的:獲取一年中第一個(gè)星期所需的最少天數(shù)。那么這兩個(gè)方法是如何共同定義的呢?先放官方api解釋?zhuān)?/p>

Calendar 使用兩個(gè)參數(shù)定義了特定于語(yǔ)言環(huán)境的 7 天制星期:星期的第一天和第一個(gè)星期中的最小一天(從 1 到 7)。
這些數(shù)字取自構(gòu)造 Calendar 時(shí)的語(yǔ)言環(huán)境資源數(shù)據(jù)。還可以通過(guò)為其設(shè)置值的方法來(lái)顯式地指定它們。
在設(shè)置或獲得 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段時(shí),Calendar 必須確定一個(gè)月或一年的第一個(gè)星期,以此作為參考點(diǎn)。
一個(gè)月或一年的第一個(gè)星期被確定為開(kāi)始于 getFirstDayOfWeek() 的最早七天,它最少包含那一個(gè)月或一年的 getMinimalDaysInFirstWeek() 天數(shù)。
第一個(gè)星期之前的各星期編號(hào)為 ...、-1、0;之后的星期編號(hào)為 2、3、...。注意,get() 返回的標(biāo)準(zhǔn)化編號(hào)方式可能有所不同。
例如,特定 Calendar 子類(lèi)可能將某一年第 1 個(gè)星期之前的那個(gè)星期指定為前一年的第 n 個(gè)星期。

是不是感覺(jué)一頭霧水?那么接下來(lái)通過(guò)幾個(gè)例子就能簡(jiǎn)單明了解釋他倆各自產(chǎn)生的效果了。
首先我們定義一星期的第一天為周一(MONDAY),然后要求一年的第一周必須要6天,即如下所示:

那么對(duì)于2020年1月1號(hào)而言,因?yàn)槎x了一周開(kāi)始是周一,那么1月1號(hào)所在的周為20191230-20200105這個(gè)星期,然后我們又規(guī)定了一年的第一周至少6天才能算該年第一周,但是在20191230-20200105這個(gè)星期內(nèi),只有12345號(hào)在2020年,共5天不滿足條件,因此2020年1月1號(hào)將歸屬于2019年的最后一周而不是2020年的第一周,運(yùn)行結(jié)果如下所示:


那么如果我們把getMinimalDaysInFirstWeek()方法的參數(shù)改為5天而一星期的開(kāi)始仍未周一呢?也就是說(shuō)一年的第一周至少5天,由日歷可知,20191230-20200105這個(gè)星期內(nèi),12345號(hào)都在2020年,即滿足了getMinimalDaysInFirstWeek()方法的條件,因此此時(shí)2020年1月1號(hào)將被歸屬到2020年的第一周,運(yùn)行結(jié)果如下:


同理,我們修改一下一周開(kāi)始的時(shí)間,規(guī)定為一周開(kāi)始時(shí)間是周日(SUNDAY),那么2020年1月1號(hào)在20191229-20200104這個(gè)星期內(nèi),getMinimalDaysInFirstWeek()參數(shù)我們不變?nèi)晕粗暗?天,那么由日歷可知,在20191229-20200104這個(gè)星期內(nèi),只有1234號(hào)這四天在2020年,不滿足至少5天的條件,因此此時(shí)2020年1月1號(hào)將被劃分到2019年的最后一周,結(jié)果如下:



那么如果說(shuō)一周開(kāi)始是周日的話怎么修改才能讓2020年1月1號(hào)算在2020年的第一周呢?只需要規(guī)定一年的第一周至少4天即可,也就是getMinimalDaysInFirstWeek()方法的參數(shù)小于4就行了,我們將參數(shù)改為4,運(yùn)行結(jié)果如下:


果然2020年1月1號(hào)歸屬到2020年第一周去了。

參數(shù)細(xì)節(jié)

getFirstDayOfWeek()方法的參數(shù)是周一到周日沒(méi)什么問(wèn)題,但是getMinimalDaysInFirstWeek()的參數(shù)范圍又是多少呢?正常按照我們的理解參數(shù)范圍1-7都是很好理解的,但是當(dāng)參數(shù)不在這個(gè)范圍內(nèi)又會(huì)發(fā)生什么?首先我們將參數(shù)規(guī)定為8看看會(huì)發(fā)生什么,一周開(kāi)始定為周一。

對(duì)于2020年1月1號(hào),自然不滿足條件,只能被歸屬到2019年最后一周,但是若是2020年1月6號(hào)呢?它屬于20200106-20200112這個(gè)星期,但是跨年的那個(gè)星期按照我們的理解只有5天是小于我們規(guī)定的8天的,因此它屬于一年的第一周?運(yùn)行結(jié)果:


符合我們的期望,轉(zhuǎn)念一想其實(shí)就明白了,參數(shù)為8時(shí)跨年的那周永遠(yuǎn)不滿足條件,第一周只會(huì)順延到跨年那周的下一周,因此我們可以認(rèn)為getMinimalDaysInFirstWeek()的參數(shù)大于8是沒(méi)有意義的。
那么如果小于1又會(huì)如何?我們將參數(shù)定義為0試試:

沒(méi)問(wèn)題,符合我們的期望,如果說(shuō)負(fù)數(shù)呢?

仍未第一周,因此我們可以總結(jié)一下getMinimalDaysInFirstWeek()參數(shù)的范圍為0-7,超出這個(gè)范圍的參數(shù)無(wú)意義。

方法細(xì)節(jié)(重要!)

對(duì)于getMinimalDaysInFirstWeek()和getFirstDayOfWeek()方法,并不是說(shuō)設(shè)置了這兩個(gè)方法的值之后,就能取到你所設(shè)置的值的日期,例如你定義一周開(kāi)始是周一,如果是當(dāng)前是周一的話,通過(guò)get (Calendar.DAY_OF_WEEK)你認(rèn)為就能取到1,但是測(cè)試發(fā)現(xiàn)結(jié)果仍然為2,因?yàn)槟J(rèn)一周開(kāi)始就是周日(1)。那么難道說(shuō)我這個(gè)設(shè)置一周開(kāi)始為周一沒(méi)有生效?
其實(shí)并不是這樣,對(duì)于這兩個(gè)方法而言,當(dāng)你在這兩個(gè)方法設(shè)置了參數(shù)時(shí),只能對(duì)WEEK_OF_MONTH 與WEEK_OF_YEAR 生效,即當(dāng)你想要獲取當(dāng)前日期對(duì)象在當(dāng)前月份是第幾周或者當(dāng)前年份第幾周時(shí)才會(huì)生效,就正如本文前面所打印的結(jié)果一樣,只會(huì)對(duì)WEEK_OF_MONTH 與WEEK_OF_YEAR起作用。

總結(jié)

getMinimalDaysInFirstWeek()和getFirstDayOfWeek()方法其實(shí)是相輔相成的,因此當(dāng)我們需要自定義跨年星期的時(shí)候最好是兩個(gè)方法的參數(shù)都設(shè)置一下,這樣對(duì)于程序而言更為嚴(yán)謹(jǐn)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70248.html

相關(guān)文章

  • Python中對(duì)日期時(shí)間處理

    摘要:中提供了一個(gè)和的模塊可以用來(lái)做格式化日期和時(shí)間的。格式化日期通過(guò)模塊中方法來(lái)格式化日期函數(shù)接收時(shí)間元組并返回以可讀字符串表示薪資的時(shí)間格式的話由參數(shù)決定。每日寬度間隔為字符每行的長(zhǎng)度為是每星期的行數(shù)。 我們可以通過(guò)學(xué)習(xí)在Python中對(duì)日期時(shí)間的處理,可以在快速的完成工作,比如: 將日期時(shí)間作為日志信息的內(nèi)容輸入 計(jì)算某一個(gè)功能的執(zhí)行時(shí)間 用日期命名一個(gè)文件的名稱(chēng) 記錄或者展示文件的...

    techstay 評(píng)論0 收藏0
  • Java編程基礎(chǔ)15——正則表達(dá)式&常用工具類(lèi)

    摘要:正則表達(dá)式的概述和簡(jiǎn)單使用正則表達(dá)式是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)語(yǔ)法規(guī)則的字符串的單個(gè)字符串。例如,在表達(dá)式中,存在四個(gè)這樣的組組零始終代表整個(gè)表達(dá)式。 1_正則表達(dá)式的概述和簡(jiǎn)單使用 A:正則表達(dá)式 是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)語(yǔ)法規(guī)則的字符串的單個(gè)字符串。其實(shí)就是一種規(guī)則。有自己特殊的應(yīng)用。 作用:比如注冊(cè)郵箱,郵箱有用戶名和密碼,一般會(huì)對(duì)其限制長(zhǎng)度,這個(gè)...

    miqt 評(píng)論0 收藏0
  • python日期時(shí)間處理總結(jié)

    摘要:用了一段時(shí)間的開(kāi)發(fā)項(xiàng)目,也是第一次用來(lái)開(kāi)發(fā)項(xiàng)目,所有有許多相關(guān)的知識(shí)點(diǎn)需要總結(jié),本文所介紹的的日期時(shí)間處理就是最近用到的,希望對(duì)各位有所幫助,也同時(shí)作為自己的筆記儲(chǔ)存。提供了等模塊用于處理日期和時(shí)間,較為常用的還是模塊。 用了一段時(shí)間的django開(kāi)發(fā)web項(xiàng)目,也是第一次用python來(lái)開(kāi)發(fā)項(xiàng)目,所有有許多相關(guān)的知識(shí)點(diǎn)需要總結(jié),本文所介紹的python的日期時(shí)間處理就是最近用到的,希...

    DoINsiSt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<