日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用 GregorianCalendar 制作当前月的月历

發布時間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 GregorianCalendar 制作当前月的月历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【0】README

0.1)本文文字總結于 core java volume 1 , 源代碼均為原創;
0.2)本文旨在熟悉 GregorianCalendar 日歷類,每一天就是一個GregorianCalendar 日歷類,一天有很多的日歷屬性,覺得用它打印一個月份的日歷出來很好玩的樣子;


【1】直接對源代碼的關鍵步驟進行分析:

  • step1) 首先構造一個日歷對象,并用當前的日期和時間進行初始化(這里還設置了日歷類的時區和方言):
gc = new GregorianCalendar(TimeZone.getTimeZone("Asia/Chongqing"),Locale.SIMPLIFIED_CHINESE);
  • step2) 調用get方法獲得當前的日月
today = gc.get(Calendar.DAY_OF_MONTH); month = gc.get(Calendar.MONTH); //當前月份
  • step3) 將 gc 設置為當前月的第一天,得到這個月的第一天是星期幾以及一周的第一天:
gc.set(Calendar.DAY_OF_MONTH, 1); //設置 gc 為當前月的第一天 weekday = gc.get(Calendar.DAY_OF_WEEK);//這個月的第一天是星期幾 firstDayOfWeek = gc.getFirstDayOfWeek(); // 一周的第一天,美國是周日,中國是周一
  • 如果第一天是星期日,變量firstDayOfWeek就是Calendar.SUNDAY , 如果是星期一,就設置為Calendar.MONDAY, 以此類推;(在美國,每個星期的第一天是星期日, 而歐洲是星期一)
  • Hint)如果想看到不同地區程序的輸出, 應該在main 方法的第一行中添加如下代碼(如ITALY):
Locale.setDefault(Locale.ITALY);
  • step4)獲得星期名數組+打印星期
weekdayNames = new DateFormatSymbols().getShortWeekdays();//星期名數組 for(String str : weekdayNames) //打印星期名稱數組out.printf("%6s", str); out.printf("\n");
  • step5)打印前面的縮進空格(空格數==這個月第一天的星期數減去該地區星期的起始計數(美國是星期日,中國是星期一))
for (int i = 0; i < weekday - firstDayOfWeek; i++)out.printf("%5s", " "); //打印前面的縮進空格
  • step6)正式開始打印日歷(只需要注意,當循環到的日歷天 屬于 該地區星期的起始計數時(美國是星期日,中國是星期一),要換行打印,以及如果日歷循環到今天,則多打印一個*號以示區別)
for (int i = 1; i <= 100; i++) {gc.set(Calendar.DAY_OF_MONTH, i);if(gc.get(Calendar.MONTH) != month)break;if(gc.get(Calendar.DAY_OF_WEEK) == firstDayOfWeek)out.printf("\n");out.printf("%5d", i);if(i == today)out.printf("*"); }

【2】源代碼

2.1)download source code: https://github.com/pacosonTang/core-java-volume/blob/master/chapter4/Chapter4Test.java 中的 main1 方法;
2.2)source code at a glance:

public static void main1(String[] args){GregorianCalendar gc;int today;int month;int weekday;int firstDayOfWeek;String[] weekdayNames; Locale.setDefault(Locale.CHINESE);// 設置方言為 簡體中文;gc = new GregorianCalendar(TimeZone.getTimeZone("Asia/Chongqing"),Locale.SIMPLIFIED_CHINESE);// 上行設置日歷的時區和方言today = gc.get(Calendar.DAY_OF_MONTH);gc.set(Calendar.DAY_OF_MONTH, 1); //設置 gc 為當前月的第一天weekday = gc.get(Calendar.DAY_OF_WEEK);//這個月的第一天是星期幾firstDayOfWeek = gc.getFirstDayOfWeek(); // 一周的第一天,美國是周日,中國是周一month = gc.get(Calendar.MONTH); //當前月份weekdayNames = new DateFormatSymbols().getShortWeekdays();//星期名數組//System.out.println(today + " " + month + " " + weekday + " " + firstDayOfWeek);for(String str : weekdayNames) //打印星期名稱數組out.printf("%6s", str);out.printf("\n");for (int i = 0; i < weekday - firstDayOfWeek; i++)out.printf("%5s", " "); //打印前面的縮進空格for (int i = 1; i <= 100; i++){gc.set(Calendar.DAY_OF_MONTH, i);if(gc.get(Calendar.MONTH) != month)break;if(gc.get(Calendar.DAY_OF_WEEK) == firstDayOfWeek)out.printf("\n");out.printf("%5d", i);if(i == today)out.printf("*");}}

【3】打印結果(我是10月31號修改的源代碼)

總結

以上是生活随笔為你收集整理的利用 GregorianCalendar 制作当前月的月历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。