输入年月 输出日历表

package com.javase;
import java.util.Scanner;

/**
 * 输入年月,将输出出日历表(从1900.1.1开始计算总天数)
 */
public class Calendar {
    public static void main(String[] args) {
        while (true){
            Scanner in=new Scanner(System.in);
            System.out.println("请输入年份:");
            int year=in.nextInt();
            System.out.println("请输入月份:");
            int month=in.nextInt();
            generateCalendar(month,year);
        }
    }

    /**
     * 为用户提供一个API接口
     * @param month
     * @param year
     */
    public static void generateCalendar(int month,int year){
        int sum=0;
        sum=countTotalDays(sum,year,month);
        printCalendar(sum,year,month);
    }

    /**
     * 计算从1900.1.1到输入月份一共多少天
     * @param sum
     * @param year
     * @param month
     * @return
     */
    public static int countTotalDays(int sum,int year,int month){
        /**
         * 按年计算1900.1.1到输入年份的1.1一共有多少天(分闰年和平年)
         */
        for(int i=1900;i<year;i++) {
            if(isR(i)) {
                sum+=366;
            }else {
                sum+=365;
            }
        }
        System.out.println(sum);
        /**
         * 按月计算今年的1.1号到输入月份的1号一共有多少天
         * 二月分闰年(29)和平年(28),大月31天,小月30天
         */
        for(int j=1;j<month;j++) {
            if(j==2) {
                if(isR(year)){
                    sum+=29;
                }else {
                    sum+=28;
                }
            }else {
                if(j==4||j==6||j==9||j==11){
                    sum+=30;
                }else {
                    sum+=31;
                }
            }
        }
        sum+=1;
        System.out.println(sum);
        return sum;
    }

    /**
     * 获取输入月份具体多少天
     * @param year
     * @param month
     * @return
     */
    public static int getMonthDays(int year,int month){
        //获取30天月份
        switch (month) {
            case 4:
            case 6:
            case 9:
            case 11:
                return 30;
            //获取2月月份天数,调用上面方法,若满足条件则返回29天,否则返回28天
            case 2:
                if(isR(year)){
                    return 29;
                }else{
                    return 28;
                }
                //若都不满足条件,则返回31天
            default:
                return 31;
        }
    }

    /**
     * 判断是否闰年
     * @param year
     * @return
     */
    public static boolean isR(int year){
        //判断是否为闰年
        if(year%4==0&&year%100!=0||year%400==0){
            //是闰年
            return true;
        }else{
            //不是闰年
            return false;
        }
    }

    /**
     * 输出日历
     * @param sum
     * @param year
     * @param month
     */
    public  static void printCalendar(int sum,int year,int month){
        int wekday=sum%7;
        System.out.println("SUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT");
        for(int i=1;i<=wekday;i++){
            System.out.print("\t");
        }
        int monthDays=getMonthDays(year,month);
        for(int i=1;i<=monthDays;i++) {
            if(sum%7==6) {
                System.out.print(i+"\n");
            }else {
                System.out.print(i+"\t");
            }
            sum++;
        }
        System.out.println("\n"+"************************************"+"\n");

    }

}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值