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

Java利用LocalDate類(lèi)實(shí)現(xiàn)日歷設(shè)計(jì)

 更新時(shí)間:2022年07月25日 09:30:27   作者:Silent丿丶黑羽  
java中做時(shí)間處理時(shí)一般會(huì)采用java.util.Date,但是相比于Date來(lái)說(shuō),還有更好的選擇--java.time.LocalDate。本文就來(lái)用LocalDate類(lèi)實(shí)現(xiàn)日歷設(shè)計(jì),感興趣的可以動(dòng)手嘗試一下

前言

在我們完成這個(gè)日歷設(shè)計(jì)前,需要了解Java中的預(yù)定義類(lèi)LocalDate的一些用法

語(yǔ)法

LocalDate.now() // 2022-07-01

會(huì)構(gòu)造一個(gè)新對(duì)象,表示構(gòu)造這個(gè)對(duì)象時(shí)的日期。

LocalDate.of(1999, 1, 1)

可以提供年、月和日來(lái)構(gòu)造對(duì)應(yīng)一個(gè)特定日期的對(duì)象:

當(dāng)然,通常我們都希望將構(gòu)造的對(duì)象保存在一個(gè)對(duì)象變量中:

LocalDate newYearsEve = LocalDate.of(1999, 1, 1);

當(dāng)有了一個(gè)LocalDate對(duì)象,可以用方法getYeargetMonthValuegetDayOfMonth得到年、月和日:

int year = newYearsEve.getYear(); // 1999
int month = newYearsEve.getMonthValue(); // 1
int day = newYeaersEve.getDayOfMonth(); // 1

上面的方法看起來(lái)沒(méi)什么意義,因?yàn)檫@正是構(gòu)造對(duì)象時(shí)使用的那些值。不過(guò),有時(shí)可能有一個(gè)計(jì)算得到的日期,然后你希望調(diào)用這些方法來(lái)了解它的更多信息。例如,plusDays方法會(huì)得到一個(gè)新的LocalDate,如果把應(yīng)用這個(gè)方法的對(duì)象稱(chēng)為當(dāng)前對(duì)象,這個(gè)新日期對(duì)象則是距當(dāng)前對(duì)象指定天數(shù)的一個(gè)新日期:

LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
year = aThousandDaysLater.getYear();  // 2002
month = aThousandDaysLater.getMonthValue();  // 09
day = aThousandDaysLater.getDayOfMonth();  // 26

aThousandDaysLater是在原來(lái)的日期上加了1000天,這時(shí)使用上面的方法就有效了

日歷實(shí)戰(zhàn)

需求:使用LocalDate類(lèi)展示當(dāng)前月的日歷,格式如下:

Mon Tue Wed Thu Fri Sat Sun
                  1*  2   3 
  4   5   6   7   8   9  10 
 11  12  13  14  15  16  17 
 18  19  20  21  22  23  24 
 25  26  27  28  29  30  31

當(dāng)前日期使用*號(hào)標(biāo)記??梢钥吹?,這個(gè)程序需要知道如何計(jì)算某月份的天數(shù)以及一個(gè)給定日期相應(yīng)是星期幾。

步驟分解

①先構(gòu)造一個(gè)對(duì)象,并用當(dāng)前的日期初始化

`LocalDate date = LocalDate.now();`

②獲取當(dāng)前的月份和日期

int month = date.getMonthValue();
int today = date.getDayOfMonth();

③將date設(shè)置為這個(gè)月的第一天,并得到這一天為星期幾

date = date.minusDays(today - 1);  // 設(shè)置為當(dāng)月的第一天
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();  // 1 = Monday    7 = Sunday

變量weekday設(shè)置為DayOfWeek類(lèi)型的對(duì)象。我們調(diào)用這個(gè)對(duì)象的getValue方法來(lái)得到星期幾的一個(gè)數(shù)值。我們會(huì)得到一個(gè)整數(shù)。星期一就返回1,星期二就返回2,依次類(lèi)推,星期日就返回7.

④由于日歷的第一行是縮進(jìn)的,這樣可使月份的第一天指向相應(yīng)的星期幾。下面代碼會(huì)打印表頭和第一行的縮進(jìn)

System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < value; i++)
    System.out.print("    ");

⑤打印日歷的主體,進(jìn)入一個(gè)循環(huán),其中date遍歷一個(gè)月中的每一天。

每次迭代時(shí),打印日期值。如果date是當(dāng)前日期,這個(gè)日期則用一個(gè)*標(biāo)記。接下來(lái),把date推進(jìn)到下一天。如果到達(dá)新的一周的第一天,則換行打?。?/p>

while (date.getMonthValue() == month) {
    System.out.printf("%3d", date.getDayOfMonth());
    if (date.getDayOfMonth() == today)
        System.out.print("*");
    else
        System.out.print(" ");
    date = date.plusDays(1);
    if (date.getDayOfWeek().getValue() == 1)
        System.out.println();
}

⑥什么時(shí)候結(jié)束呢?我們不知道這個(gè)月有幾天,是28、29、30還是31。實(shí)際上,只要date還在當(dāng)月就要繼續(xù)迭代

完整代碼

import java.time.DayOfWeek;
import java.time.LocalDate;

/**
 * @author JKC
 * @Description:
 * @date 2022/7/1 10:53
 */
public class 制作日歷 {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)日期對(duì)象,并進(jìn)行初始化
        LocalDate date = LocalDate.now();
        System.out.println(date);
        // 獲取當(dāng)前月份和日期
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();

        // 將date設(shè)置為這個(gè)月的第一天,并得到這一天為星期幾
        date = date.minusDays(today - 1);
        // 設(shè)置為DayOfWeek類(lèi)型的對(duì)象。調(diào)用這個(gè)對(duì)象的getValue方法來(lái)得到星期幾的一個(gè)數(shù)值
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();  // 1 = Monday    7 = Sunday

        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for (int i = 1; i < value; i++)
            System.out.print("    ");

        while (date.getMonthValue() == month) {
            System.out.printf("%3d", date.getDayOfMonth());
            if (date.getDayOfMonth() == today)
                System.out.print("*");
            else
                System.out.print(" ");
            date = date.plusDays(1);
            if (date.getDayOfWeek().getValue() == 1)
                System.out.println();
        }
        if (date.getDayOfWeek().getValue() != 1)
            System.out.println();
    }
}

結(jié)論

上面的示例程序的重點(diǎn)是展示如何使用一個(gè)類(lèi)的接口完成相當(dāng)復(fù)雜的任務(wù),而無(wú)須了解實(shí)現(xiàn)細(xì)節(jié)

LocalDate API

static LocalDate now()
 //構(gòu)造一個(gè)表示當(dāng)前日期的對(duì)象

static LocalDate of(int year, int month, int day)
//構(gòu)造一個(gè)表示給定日期的對(duì)象

int getYear()
int getMonthValue()
int getDayOfMonth()
//得到當(dāng)前日期的年、月和日。

DayOfWeek getDayOfWeek
//得到當(dāng)前日期是星期幾,作為DayOfWeek類(lèi)的一個(gè)實(shí)例返回。調(diào)用getValue來(lái)得到1~7之間的一個(gè)數(shù),表示這是星期幾,1表示星期一,7表示星期日

LocalDate plusDays(int n)
LocalDate minusDays(int n)
//生成當(dāng)前日期之后或之前n天的日期

到此這篇關(guān)于Java利用LocalDate類(lèi)實(shí)現(xiàn)日歷設(shè)計(jì)的文章就介紹到這了,更多相關(guān)Java LocalDate日歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決springboot文件配置端口不起作用(默認(rèn)8080)

    解決springboot文件配置端口不起作用(默認(rèn)8080)

    這篇文章主要介紹了解決springboot文件配置端口不起作用(默認(rèn)8080),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Springboot通過(guò)url訪問(wèn)本地圖片代碼實(shí)例

    Springboot通過(guò)url訪問(wèn)本地圖片代碼實(shí)例

    這篇文章主要介紹了springboot通過(guò)url訪問(wèn)本地圖片代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • IDEA檢查項(xiàng)目的jdk版本需要看的地方

    IDEA檢查項(xiàng)目的jdk版本需要看的地方

    這篇文章主要介紹了IDEA檢查項(xiàng)目的jdk版本需要看的地方,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml

    多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml

    這篇文章主要介紹了多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java(若依)如何讀取Yml配置文件

    Java(若依)如何讀取Yml配置文件

    文章介紹了如何在Java若依框架中讀取Yml配置文件,包括定義配置字段、編寫(xiě)讀取工具類(lèi)以及注意事項(xiàng),最后總結(jié)了個(gè)人經(jīng)驗(yàn)
    2025-02-02
  • 為什么rest接口返回json建議采用下劃線形式,不要用駝峰

    為什么rest接口返回json建議采用下劃線形式,不要用駝峰

    為什么rest接口返回json建議采用下劃線形式,不要用駝峰?今天小編就來(lái)為大家說(shuō)明一下原因,還等什么?一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • mybatis-plus用insertBatchSomeColumn方法批量新增指定字段

    mybatis-plus用insertBatchSomeColumn方法批量新增指定字段

    mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了關(guān)于mybatis-plus用insertBatchSomeColumn方法批量新增指定字段的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Eureka源碼閱讀解析Server服務(wù)端啟動(dòng)流程實(shí)例

    Eureka源碼閱讀解析Server服務(wù)端啟動(dòng)流程實(shí)例

    這篇文章主要為大家介紹了Eureka源碼閱讀解析Server服務(wù)端啟動(dòng)流程實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 最新評(píng)論

    隆安县| 阳泉市| 长海县| 尉氏县| 南阳市| 十堰市| 襄垣县| 通城县| 清苑县| 谷城县| 贵定县| 达拉特旗| 长乐市| 济南市| 资兴市| 和平区| 麦盖提县| 东辽县| 金山区| 台北县| 吉木萨尔县| 德钦县| 青海省| 黄龙县| 荃湾区| 北宁市| 定日县| 林口县| 西乡县| 仙居县| 昌江| 黔西| 天峻县| 昆明市| 绍兴市| 武功县| 内黄县| 花莲市| 莲花县| 景洪市| 余庆县|