2025年Java输出某一年的日历(可改成输出某年某月的日历)

Java输出某一年的日历(可改成输出某年某月的日历)这里给大家展示一下如何用 Java 写一个输出某一年日历的程序 水平有限 如果有更简单的方法 不妨在评论区分享 一年的日历 是由每一个月的小日历组成的 一个月的日历分为日历头 2020 年 1 月 和日历体 要打印一年的日历 只需输出某一年中 1 到 12 月的小日历 输出日历头

大家好,我是讯享网,很高兴认识大家。

这里给大家展示一下如何用Java写一个输出某一年日历的程序。水平有限,如果有更简单的方法,不妨在评论区分享!


一年的日历,是由每一个月的小日历组成的。一个月的日历分为日历头(2020年-1月)和日历体。

要打印一年的日历,只需输出某一年中1到12月的小日历。

输出日历头

    public static void printMonthTitle(int year,int month) {
        
        System.out.printf("\n%13s-%-13d\n",getMonthsName(month),year); //getMonthsName方法用于得到对应月份的名字,如1月为Jan,6月为Jun
        for(int i=1;i<=27;i++) System.out.print("=");
        System.out.println("\nMon Tue Wed Thu Fri Sat Sun"); // 该日历以星期一开始
        
    }

输出日历体

    public static void printMonthBody(int year,int month) {
        
        int count=0;
        int day=firstDayOfMonth(year,month); //算出月份第一天是星期几
        int totalDaysOfMonth=getTotalDaysOfMonth(year,month); //一个月一共多少天
        for(int i=1;i<day;i++) {
            System.out.print("    ");
            count++;
        }
        for(int i=1;i<=totalDaysOfMonth;i++) {
            if(count==7) {
                System.out.printf("\n");
                count=0;
            }
            System.out.printf("%-4d",i);
            count++;
        }
    }

整个程序的实现的难点在于每个月份开始的第一天对应是星期几是变化的。一个星期是7天,那么星期的变化周期就是7。我们在这里需要找一天进行参照,为了计算的方便,我们一般找某一年的第一天,如2019年1月1号,星期二。要知道某一年某月的第一天是星期几,我们只需要计算某年某月第一天跟2019年1月1号距离多少天,后运用星期变化周期为7天的性质,便可以计算出来了。


讯享网

代码实现:

public static int firstDayOfMonth(int year,int month) {
        int daysFrom2019_1_1=0;
        int day=2;//Tuesday
        if(year>=2019) {
            for(int y=2019;y<year;y++) {
                if(isLeapYear(y)) {
                    daysFrom2019_1_1=daysFrom2019_1_1+366;
                }
                else {
                    daysFrom2019_1_1=daysFrom2019_1_1+365;
                }
            }
            for(int i=1;i<month;i++) {
                daysFrom2019_1_1=daysFrom2019_1_1+getTotalDaysOfMonth(year,i);
            }
        }
        else {
            for(int y=year+1;y<2019;y++) {
                if(isLeapYear(y)) {
                    daysFrom2019_1_1=daysFrom2019_1_1+366;
                }
                else {
                    daysFrom2019_1_1=daysFrom2019_1_1+365;
                }
            }
            for(int i=12;i>=month;i--) {
                daysFrom2019_1_1=daysFrom2019_1_1+getTotalDaysOfMonth(year,i);
            }
        }
        if(year>=2019) {
            day=((daysFrom2019_1_1%7)+day)%7;
        }
        else {
            day = (day-(daysFrom2019_1_1%7)+7)%7;
        }
        if(day==0) day=7; // 
        return day;
    }

代码中day代表星期几,取值范围是1~7,如2019年1月1号为星期二,那么day=2. 

完整代码:

import java.util.*;
public class Calender{
    
    public static void main(String args[]) {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter the year:");
        int year=in.nextInt();
        in.close();
        for(int i=1;i<=12;i++) {
            
            printMonthTitle(year,i);
            
            printMonthBody(year,i);
            
        }
        
    }
    
    public static String getMonthsName(int month) {
        String monthsName="Jan";
        switch(month) {
        case 1:monthsName="Jan";break;
        case 2:monthsName="Feb";break;
        case 3:monthsName="Mar";break;
        case 4:monthsName="Apir";break;
        case 5:monthsName="May";break;
        case 6:monthsName="Jun";break;
        case 7:monthsName="Jul";break;
        case 8:monthsName="Aug";break;
        case 9:monthsName="Sep";break;
        case 10:monthsName="Oct";break;
        case 11:monthsName="Nov";break;
        case 12:monthsName="Dec";break;
        }
        return monthsName;
    }
    public static int getTotalDaysOfMonth(int year,int month) {
        switch(month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:return 31;
        case 2:{
            if(isLeapYear(year))
                return 29;
            else 
                return 28;
        }
        default: return 30;
        }
    }
    
    public static int firstDayOfMonth(int year,int month) {
        int daysFrom2019_1_1=0;
        int day=2;//Tuesday
        if(year>=2019) {
            for(int y=2019;y<year;y++) {
                if(isLeapYear(y)) {
                    daysFrom2019_1_1=daysFrom2019_1_1+366;
                }
                else {
                    daysFrom2019_1_1=daysFrom2019_1_1+365;
                }
            }
            for(int i=1;i<month;i++) {
                daysFrom2019_1_1=daysFrom2019_1_1+getTotalDaysOfMonth(year,i);
            }
        }
        else {
            for(int y=year+1;y<2019;y++) {
                if(isLeapYear(y)) {
                    daysFrom2019_1_1=daysFrom2019_1_1+366;
                }
                else {
                    daysFrom2019_1_1=daysFrom2019_1_1+365;
                }
            }
            for(int i=12;i>=month;i--) {
                daysFrom2019_1_1=daysFrom2019_1_1+getTotalDaysOfMonth(year,i);
            }
        }
        if(year>=2019) {
            day=((daysFrom2019_1_1%7)+day)%7;
        }
        else {
            day = (day-(daysFrom2019_1_1%7)+7)%7;
        }
        if(day==0) day=7;
        return day;
    }
    
    public static void printMonthTitle(int year,int month) {
        
        System.out.printf("\n%13s-%-13d\n",getMonthsName(month),year);
        for(int i=1;i<=27;i++) System.out.print("=");
        System.out.println("\nMon Tue Wed Thu Fri Sat Sun");
        
    }
    
    public static void printMonthBody(int year,int month) {
        
        int count=0;
        int day=firstDayOfMonth(year,month);
        int totalDaysOfMonth=getTotalDaysOfMonth(year,month);
        for(int i=1;i<day;i++) {
            System.out.print("    ");
            count++;
        }
        for(int i=1;i<=totalDaysOfMonth;i++) {
            if(count==7) {
                System.out.printf("\n");
                count=0;
            }
            System.out.printf("%-4d",i);
            count++;
        }
    }
    
    public static boolean isLeapYear(int year) {
        if(( year%4==0&&year%100!=0 )||(year%400==0))
            return true;
        else
            return false;
    }
}
 

 

小讯
上一篇 2025-03-01 09:27
下一篇 2025-01-17 09:42

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117502.html