欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用LocalDate類實(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類實(shí)現(xiàn)日歷設(shè)計(jì),感興趣的可以動(dòng)手嘗試一下

前言

在我們完成這個(gè)日歷設(shè)計(jì)前,需要了解Java中的預(yù)定義類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ì)象稱為當(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類展示當(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類型的對(duì)象。我們調(diào)用這個(gè)對(duì)象的getValue方法來(lái)得到星期幾的一個(gè)數(shù)值。我們會(huì)得到一個(gè)整數(shù)。星期一就返回1,星期二就返回2,依次類推,星期日就返回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類型的對(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è)類的接口完成相當(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類的一個(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類實(shí)現(xiàn)日歷設(shè)計(jì)的文章就介紹到這了,更多相關(guān)Java LocalDate日歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中Redis的緩存更新策略詳解

    SpringBoot中Redis的緩存更新策略詳解

    這篇文章主要介紹了SpringBoot中Redis的緩存更新策略,緩存一般是為了應(yīng)對(duì)高并發(fā)場(chǎng)景、緩解數(shù)據(jù)庫(kù)讀寫壓力,而將數(shù)據(jù)存儲(chǔ)在讀寫更快的某種存儲(chǔ)介質(zhì)中(如內(nèi)存),以加快讀取數(shù)據(jù)的速度,需要的朋友可以參考下
    2023-08-08
  • 支持SpEL表達(dá)式的自定義日志注解@SysLog介紹

    支持SpEL表達(dá)式的自定義日志注解@SysLog介紹

    這篇文章主要介紹了支持SpEL表達(dá)式的自定義日志注解@SysLog,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java高并發(fā)鎖的3種實(shí)現(xiàn)示例代碼

    java高并發(fā)鎖的3種實(shí)現(xiàn)示例代碼

    本篇文章主要介紹了java高并發(fā)鎖的3種實(shí)現(xiàn)示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 詳解Vue響應(yīng)式的部分實(shí)現(xiàn)

    詳解Vue響應(yīng)式的部分實(shí)現(xiàn)

    響應(yīng)式,簡(jiǎn)單來(lái)說(shuō)當(dāng)數(shù)據(jù)發(fā)生變化時(shí),對(duì)數(shù)據(jù)有依賴的代碼會(huì)重新執(zhí)行。這篇文章主要為大家介紹了Vue中響應(yīng)式的部分實(shí)現(xiàn),感興趣的可以了解一下
    2022-12-12
  • Java中extends一定是代表繼承嗎?

    Java中extends一定是代表繼承嗎?

    今天小編就為大家分享一篇關(guān)于Java中extends一定是代表繼承嗎?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Java實(shí)現(xiàn)Excel轉(zhuǎn)PDF的兩種方法詳解

    Java實(shí)現(xiàn)Excel轉(zhuǎn)PDF的兩種方法詳解

    使用具將Excel轉(zhuǎn)為PDF的方法有很多,在這里我給大家介紹兩種常用的方法:使用spire轉(zhuǎn)化PDF、使用jacob實(shí)現(xiàn)Excel轉(zhuǎn)PDF,分別應(yīng)對(duì)兩種不一樣的使用場(chǎng)景,需要的可以參考一下
    2022-01-01
  • Keycloak各種配置及API的使用說(shuō)明

    Keycloak各種配置及API的使用說(shuō)明

    這篇文章主要介紹了Keycloak各種配置及API的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP軟件主界面(4)

    Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP軟件主界面(4)

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP軟件主界面編寫的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 一篇文章從無(wú)到有詳解Spring中的AOP

    一篇文章從無(wú)到有詳解Spring中的AOP

    。Spring AOP 是基于 AOP 編程模式的一個(gè)框架,它的使用有效減少了系統(tǒng)間的重復(fù)代碼,達(dá)到了模塊間的松耦合目的,這篇文章主要給大家介紹了關(guān)于Spring中AOP的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • java判斷字符串包含某個(gè)字符的實(shí)例方法

    java判斷字符串包含某個(gè)字符的實(shí)例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于java判斷字符串包含某個(gè)字符的實(shí)例方法,有需要的朋友們學(xué)習(xí)下。
    2019-12-12

最新評(píng)論