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

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

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

前言

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

語法

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

會構(gòu)造一個新對象,表示構(gòu)造這個對象時的日期。

LocalDate.of(1999, 1, 1)

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

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

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

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

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

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

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

aThousandDaysLater是在原來的日期上加了1000天,這時使用上面的方法就有效了

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

需求:使用LocalDate類展示當(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)前日期使用*號標(biāo)記??梢钥吹剑@個程序需要知道如何計算某月份的天數(shù)以及一個給定日期相應(yīng)是星期幾。

步驟分解

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

`LocalDate date = LocalDate.now();`

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

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

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

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

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

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

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

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

每次迭代時,打印日期值。如果date是當(dāng)前日期,這個日期則用一個*標(biāo)記。接下來,把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();
}

⑥什么時候結(jié)束呢?我們不知道這個月有幾天,是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)建一個日期對象,并進(jìn)行初始化
        LocalDate date = LocalDate.now();
        System.out.println(date);
        // 獲取當(dāng)前月份和日期
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();

        // 將date設(shè)置為這個月的第一天,并得到這一天為星期幾
        date = date.minusDays(today - 1);
        // 設(shè)置為DayOfWeek類型的對象。調(diào)用這個對象的getValue方法來得到星期幾的一個數(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)是展示如何使用一個類的接口完成相當(dāng)復(fù)雜的任務(wù),而無須了解實(shí)現(xiàn)細(xì)節(jié)

LocalDate API

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

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

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

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

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

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

相關(guān)文章

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

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

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

    Springboot通過url訪問本地圖片代碼實(shí)例

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

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

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

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

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

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

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

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

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

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

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

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

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

    且末县| 许昌县| 平阴县| 宁乡县| 镇宁| 察隅县| 伊金霍洛旗| 冷水江市| 白玉县| 绥宁县| 昆山市| 苍梧县| 麻江县| 新野县| 咸丰县| 新疆| 河西区| 任丘市| 林口县| 奉新县| 乡城县| 威远县| 昌江| 建湖县| 敖汉旗| 永平县| 手机| 读书| 武功县| 云龙县| 大石桥市| 南和县| 伊宁市| 六安市| 云龙县| 永泰县| 祁连县| 四会市| 晋中市| 宜阳县| 青海省|