日常练习,根据输入的年月获取当月的日历

package test;

import java.util.*;
/**
 * 输入年月,返回当月的日历
 * @author asus
 *
 */
public class MonthTest {

     public static void main(String[] args) {
           Scanner in = new Scanner(System. in);
           System. out.println( "请输入年份" );
            int year = in.nextInt();
           System. out.println( "请输入月份" );
            int month = in.nextInt();
            long sum = 0; //sum可能会是个大数这里用long型保存比较好
            int u = 0; //用来保存当月的天数
            boolean leapYear = false; //标志位,是否闰年的标志
            //计算从1900年到输入的年份(不含当年)之间的天数
            for ( int i = 1900; i < year; i++) {
                 //区分当年是否是闰年
                 if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                     sum += 366;
                     leapYear = true;
                } else {
                     sum += 365;
                     leapYear = false;
                }
           }
            //计算从1月份到输入的月份(不含当月)之间的天数
            for ( int I = 1; I < month; I++) {
                 if (I == 2) {
                      if (leapYear) {
                           sum += 29;
                     } else {
                           sum += 28;
                     }
                } else if (I == 4 || I == 6 || I == 9 || I == 11) {
                     sum += 30;
                } else {
                     sum += 31;
                }
           }
            /*
            * sum+=7; System.out.println("1900年1月1日到2016年5月7日一共:"+sum+"天");
            * System.out.println("2016年5月7日为星期"+sum%7);
            */
            //计算输入的年月的上一个月的最后一天是周几
            long wekday = sum % 7;
           System. out.println( "日\t一\t二\t三\t四\t五\t六" );
            //使用/t占位,找到输入的月份的第一天的位置
            for ( int i = 0; i <= wekday; i++) {
                System. out.print( "[]\t");
           }
            //获取输入月份的天数
            if (month == 2) {
                 if (leapYear) {
                     u = 29;
                } else {
                     u = 28;
                }
           } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                u = 30;
           } else {
                u = 31;
           }
            //将当月的日期与星期对应
            for ( int i = 1; i <= u; i++) {
                sum++;
                 if (sum % 7 == 6) {
                     System. out.print(i + "\n");
                } else {
                     System. out.print(i + "\t");
                }
                
           }
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值