利用Java編寫(xiě)一個(gè)屬于自己的日歷
問(wèn)題提出
編寫(xiě)程序,輸入年份,打印出該年的年歷(12個(gè)月的),效果如下圖所示。

一點(diǎn)提示
使用 Java 自帶的 Calendar 類得到一個(gè) Calendar 類對(duì)象,然后我們可以去得到每個(gè)月的第一天是星期幾
Calendar 類不能直接 new 得到對(duì)象,需要使用 getInstance() 函數(shù)
//得到一個(gè)Calendar對(duì)象 Calendar c = Calendar.getInstance();
Calendar 類的 set 可以設(shè)置自己想要的日期為當(dāng)前日期
get(Calendar.DAY_OF_WEEK) 可以得到某一天是星期幾,由于其內(nèi)部默認(rèn)為美國(guó)時(shí)區(qū),所以我們?cè)O(shè)置月份和計(jì)算星期幾要減一
//設(shè)置日期為當(dāng)前月份的第一天,由于時(shí)區(qū)的原因,month-1,get(java.util.Calendar.DAY_OF_WEEK) - 1 c.set(year, month - 1, 1); //求出第一天是星期幾 int FirstDayInWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
然后通過(guò)循環(huán)打印出每個(gè)月的日歷,注意大小月和閏月問(wèn)題。
源碼分享
//導(dǎo)入相關(guān)包
import java.util.Scanner;
import java.util.Calendar;
public class MyCalendar {
public static void main(String[] args) {
//保存用戶輸入的年份
int year;
//保存每個(gè)月的天數(shù)
int days = 0;
//保存月份
String[] months;
months = new String[13];
months[1] = "January";
months[2] = "February";
months[3] = "March";
months[4] = "April";
months[5] = "May";
months[6] = "June";
months[7] = "July";
months[8] = "August";
months[9] = "September";
months[10] = "October";
months[11] = "November";
months[12] = "December";
//接受用戶輸入的年份
Scanner in = new Scanner(System.in);
System.out.print("Please input years:");
year = in.nextInt();
//得到一個(gè)Calendar對(duì)象
Calendar c = Calendar.getInstance();
//循環(huán) 12 個(gè)月
for (int month = 1; month <= 12; month++) {
//標(biāo)題
System.out.println("\n Month's name is " + months[month]);
for (int i = 1; i <= 27; i++) System.out.print("=");
System.out.println("\nSun\tMon\tTue\tWed\tThu\tFri\tSat");
// 判斷當(dāng)前月份的天數(shù)
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
days = 31;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
}
if (month == 2) {
//閏年判斷
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
days = 29;
} else {
days = 28;
}
}
//設(shè)置日期為當(dāng)前月份的第一天,由于時(shí)區(qū)的原因,month-1,get(java.util.Calendar.DAY_OF_WEEK) - 1
c.set(year, month - 1, 1);
//求出第一天是星期幾
int FirstDayInWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
//用來(lái)控制換行
int cnt = 0;
//前面的空位
for (int j = 0; j < FirstDayInWeek; j++) {
System.out.print(" ");
cnt++;
}
//打印當(dāng)前月份日歷
for (int i = 1; i <= days; i++) {
if (cnt == 7) {
System.out.printf("\n");
cnt = 0;
}
System.out.printf("%-4d", i);
cnt++;
}
System.out.print("\n");
}
}
}到此這篇關(guān)于利用Java編寫(xiě)一個(gè)屬于自己的日歷的文章就介紹到這了,更多相關(guān)Java日歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中使用Apache POI讀取word文件簡(jiǎn)單示例
這篇文章主要介紹了Java中使用Apache POI讀取word文件簡(jiǎn)單示例,本文著重介紹了一些必要條件,然后給出一個(gè)簡(jiǎn)單讀取示例,需要的朋友可以參考下2015-06-06
IDEA中實(shí)體類(POJO)與JSON快速互轉(zhuǎn)問(wèn)題
這篇文章主要介紹了IDEA中實(shí)體類(POJO)與JSON快速互轉(zhuǎn),本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
利用JSONObject.toJSONString()包含或排除指定的屬性
這篇文章主要介紹了利用JSONObject.toJSONString()包含或排除指定的屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
SpringBoot實(shí)現(xiàn)國(guó)密通信的流程步驟
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)國(guó)密通信的流程步驟,我們需要完成以下步驟:生成支持國(guó)密的證書(shū),配置兩個(gè) Spring Boot 項(xiàng)目,使用國(guó)密證書(shū)實(shí)現(xiàn) HTTPS和驗(yàn)證通信是否成功,通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-11-11
Spring AOP切點(diǎn)表達(dá)式使用及說(shuō)明
這篇文章主要介紹了Spring AOP切點(diǎn)表達(dá)式使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java設(shè)計(jì)模式之簡(jiǎn)單工廠 工廠方法 抽象工廠深度總結(jié)
設(shè)計(jì)模式(Design Pattern)是前輩們對(duì)代碼開(kāi)發(fā)經(jīng)驗(yàn)的總結(jié),是解決特定問(wèn)題的一系列套路。它不是語(yǔ)法規(guī)定,而是一套用來(lái)提高代碼可復(fù)用性、可維護(hù)性、可讀性、穩(wěn)健性以及安全性的解決方案2021-09-09
解決Spring?Security集成knife4j訪問(wèn)接口文檔出現(xiàn)403的問(wèn)題
這篇文章主要給大家介紹了如何解決Spring?Security集成knife4j訪問(wèn)接口文檔出現(xiàn)403的問(wèn)題,文中有詳細(xì)的解決方案,有需要的朋友可以參考閱讀下2023-07-07

