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

Java編寫日歷表的3種方式

 更新時間:2021年08月11日 11:18:43   作者:信仰柴神的人  
這篇文章主要為大家詳細(xì)介紹了Java編寫日歷表的3種方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

大家好,今天我和大家分享一下用Java編寫日歷表,我用了3種方式實(shí)現(xiàn)這一功能的。

首先我們來看看一個日歷表有什么特征。在這里我就把我電腦上的日歷表截下來分析一下

我們從上向下看:這個日歷表顯示了年份,月份,星期數(shù)即星期一到星期日,每一天對應(yīng)一個星期數(shù),天數(shù)每隔七天換一下行,當(dāng)月的總天數(shù)。還有一個就是每個月的第一天是接著上個月的最后一天的。

我們發(fā)現(xiàn)我們想要創(chuàng)建一個日歷表就只需要知道年份,月份和該月份的第一天是星期幾還有就是該月份的總天數(shù)就行。

年份和月份是我們自己設(shè)置要查看的年份和月份,每個月的總天數(shù)我們都是知道的,只要知道月份就能知道該月份的總天數(shù),不過2月份除外,2月份的總天數(shù)需要判斷該年是平年還是閏年。最后一個問題就是怎么樣獲取該月份的第一天是星期幾?在上面我提到過每個月的第一天是接著上個月的最后一天的,并且1900年1月1日是星期一,我們可以把從1900年到我們指定日期的前一個月的總天數(shù)求出來對7取余,就是上一個月最后一天的星期數(shù)(也是這個月開始前面的空格數(shù))。

我寫的第一種方式:不用Java中的類

獲取從1900年到我們指定日期的前一個月的總天數(shù)

 //指定的日歷年份
    public static int year;
    //指定的日歷月份
    public static int month;
​
    //獲得總天數(shù)
    public static int getDaysFrom1900() {
        int days = 0;
        //統(tǒng)計(jì)從1900年到指定日歷年份的前一年的天數(shù)
        for (int i = 1900; i < year; i++) {
            days += isLeapYear(i) ? 366 : 365;
        }
        //統(tǒng)計(jì)從一月到指定日歷月份的前一個月的天數(shù)
        for (int i = 1; i < month; i++) {
            days += getDaysFromMonth(i);
        }
        return days;
    }
 //獲取指定月份的天數(shù)
    private static int getDaysFromMonth(int month) {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return 31;
            case 2:
                return isLeapYear(year) ? 29 : 28;
            default:
                return 30;
        }
    }
​
    //判斷指定年份是平年還是閏年
    private static boolean isLeapYear(int year) {
        return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
    }

​顯示:這里用計(jì)數(shù)器來計(jì)數(shù),能計(jì)空格的數(shù)量

 //顯示日歷
    public static void show() {
        //獲取從1900年到指定月份前一個月的總天數(shù)
        int totalDays = getDaysFrom1900();
        //獲取指定月份的天數(shù)
        int daysOfMonth = getDaysFromMonth(month);
        //獲取指定月份第一天前面的空格數(shù)
        int space = totalDays % 7;
        //計(jì)數(shù)器
        int count = 0;
        //顯示
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        System.out.println("==========================");
        for (int i = 0; i < space; i++) {
            count++;
            System.out.print("\t");
        }
        for (int i = 1; i <= daysOfMonth; i++) {
            count++;
            System.out.print(i + "\t");
            if (count % 7 == 0) {
                count = 0;
                //換行
                System.out.println();
            }
        }
}

我寫的第二種方式:使用Java中的Calendar類,Calendar類中提供了getActualMaximum(Calendar.DAY_OF_MONTH)方法來獲取指定月份的總天數(shù),我們可以利用Calendar類中的set(Calendar.DAY_OF_MONTH, 1)方法把日期中的天數(shù)設(shè)置為當(dāng)月的第一天,然后通過get(Calendar.DAY_OF_WEEK)獲取當(dāng)月的第一天的星期數(shù)

public static void show(int y, int m) {
        //獲取當(dāng)前系統(tǒng)時間
        Calendar c = Calendar.getInstance();
        //獲取當(dāng)前的日期
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        //設(shè)置指定的日期
        c.set(Calendar.YEAR,y);
        c.set(Calendar.MONTH,m-1);
        c.set(Calendar.DAY_OF_MONTH, 1);
        //獲取指定月份的總天數(shù)
        int dayOfMonth = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        //獲取指定月份第一天的星期
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
        //顯示
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        System.out.println("==========================");
        dayOfWeek = dayOfWeek == 0 ? 7 : dayOfWeek;
        //獲取指定月份前面的空格數(shù)
        int space = dayOfWeek - 1;
        int count = 0;
        for (int i = 0; i < space; i++) {
            count++;
            System.out.print("\t");
        }
        for (int i = 1; i <= dayOfMonth; i++) {
            count++;
            //判斷是不是當(dāng)前系統(tǒng)的日期時間
            String date = (y == year && m == month && i == day) ?
            "*" + i + "\t" : i + "\t";
            System.out.print(date);
            if (count % 7 == 0) {
                count = 0;
                System.out.println();
            }
        }
​
    }

​我寫的第三種方式:使用Java中的LocalDate類,LocalDate類中提供了getMonth()的方法來獲取指定的月份而Month枚舉中提供了

length(boolean leapYear)的方法來獲取指定月的總天數(shù),LocalDate類中還提供了getDayOfWeek()的方法來獲取指定天數(shù)的星期數(shù)。我用LocalDate類中提供的LocalDate.of(y,m,1)把日期中的天數(shù)設(shè)置為當(dāng)月的第一天**

public static void show(int y, int m) {
        //獲取當(dāng)前系統(tǒng)時間
        LocalDate date = LocalDate.now();
        //獲取當(dāng)前的日期
        int year = date.getYear();
        int month = date.getMonth().getValue();
        int day = date.getDayOfMonth();
        //設(shè)置指定的日期
        LocalDate date1 = LocalDate.of(y,m,1);
        //獲取指定月份的總天數(shù)
        int daysOfMonth = date1.getMonth()
        .length(y % 4 == 0 && y % 100 != 0 || y % 400 == 0);
        //獲取指定月份前面的空格數(shù)
        int space= date1.getDayOfWeek().getValue()-1;
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        System.out.println("==========================");
        int count = 0;
        for (int i = 0; i < space; i++) {
            count++;
            System.out.print("\t");
        }
        for (int i = 1; i <= daysOfMonth; i++) {
            count++;
            //判斷是不是當(dāng)前系統(tǒng)的日期時間
            String src = (y == year && m == month && i == day) ?
            "*" + i + "\t" : i + "\t";
            System.out.print(src);
            if (count % 7 == 0) {
                count = 0;
                System.out.println();
            }
        }
    }

main函數(shù):第一種方式中的show()方法沒有參數(shù),因?yàn)槲以O(shè)置了成員變量來接收,下面的是第二和第三種方式的main函數(shù)。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入年份:");
        int year = sc.nextInt();
        System.out.println("請輸入月份:");
        int month = sc.nextInt();
        show(year, month);
    }

運(yùn)行結(jié)果:

第一種方式:

第二和第三中方式:我在顯示表的時候判斷了一下是不是當(dāng)前的系統(tǒng)日期。

總結(jié):對于日歷表的問題,只要知道月份的第一天是星期幾還有就是該月份的總天數(shù)就能解決。第一種方式是我初學(xué)Java的解決方式、第二種方式是我學(xué)到Calendar類的解決方式、第三種方式是我學(xué)到LocalDate類的解決方式。隨著我們不斷的學(xué)習(xí)Java這門語言,我們的眼界就會在這個學(xué)習(xí)的過程中不斷開闊,就會對一個問題產(chǎn)生不同的看法,不同的解決思路。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot?application.yml配置文件拆分方式

    Springboot?application.yml配置文件拆分方式

    這篇文章主要介紹了Springboot?application.yml配置文件拆分方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中Arrays的介紹及使用方法示例

    Java中Arrays的介紹及使用方法示例

    這篇文章主要給大家介紹了關(guān)于Java中Arrays及使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法

    實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法

    今天小編就為大家分享一篇關(guān)于實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • java長整除問題淺談

    java長整除問題淺談

    這篇文章主要介紹了java長整除問題,有需要的朋友可以參考一下
    2013-11-11
  • 探索jedis連接池預(yù)熱優(yōu)化高并發(fā)

    探索jedis連接池預(yù)熱優(yōu)化高并發(fā)

    這篇文章主要為大家介紹了jedis連接池預(yù)熱優(yōu)化高并發(fā)深入探索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 關(guān)于MyBaties的基本配置標(biāo)簽總結(jié)

    關(guān)于MyBaties的基本配置標(biāo)簽總結(jié)

    今天給大家?guī)淼氖顷P(guān)于MyBaties基礎(chǔ)的相關(guān)知識,文章圍繞著MyBaties的基本配置標(biāo)簽展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java通過Freemarker模板實(shí)現(xiàn)生成Word文件

    Java通過Freemarker模板實(shí)現(xiàn)生成Word文件

    FreeMarker是一款模板引擎: 即一種基于模板和要改變的數(shù)據(jù), 并用來生成輸出文本的通用工具。本文將根據(jù)Freemarker模板實(shí)現(xiàn)生成Word文件,需要的可以參考一下
    2022-09-09
  • springboot如何接收復(fù)雜參數(shù)(同時接收J(rèn)SON與文件)

    springboot如何接收復(fù)雜參數(shù)(同時接收J(rèn)SON與文件)

    文章介紹了在Spring Boot中同時處理JSON和文件上傳時使用`@RequestPart`注解的方法,`@RequestPart`可以接收多種格式的參數(shù),包括JSON和文件,并且可以作為`multipart/form-data`格式中的key
    2025-02-02
  • Java實(shí)現(xiàn)excel表格轉(zhuǎn)成json的方法

    Java實(shí)現(xiàn)excel表格轉(zhuǎn)成json的方法

    本篇文章主要介紹了Java實(shí)現(xiàn)excel表格轉(zhuǎn)成json的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • @Cacheable 拼接key的操作

    @Cacheable 拼接key的操作

    這篇文章主要介紹了@Cacheable 拼接key的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

揭阳市| 桂林市| 黄平县| 临海市| 哈密市| 洛宁县| 阳山县| 乌拉特前旗| 如东县| 唐山市| 明水县| 高尔夫| 石泉县| 库车县| 瑞丽市| 万宁市| 湛江市| 鄂尔多斯市| 宁阳县| 西青区| 高青县| 屯留县| 合作市| 德江县| 宜阳县| 辽宁省| 舟曲县| 澳门| 衡水市| 姚安县| 临安市| 静宁县| 夏邑县| 合山市| 大同市| 荥阳市| 临沭县| 五河县| 洛川县| 喀喇| 新竹市|