java制作简单日历

输入年份和月份,输出当年当月的日历

输入输出如下:

在这里插入图片描述
主要思路:
1、判断平年闰年并判断2月的天数
2、判断星期几
3、日期与星期的对应,输出

代码如下:

import java.util.Scanner;

public class RiLi {
	public static void main(String[] args) {
		int sumDay=0;
		Scanner in=new Scanner(System.in);
		System.out.print("请输入年份:");
		int year=in.nextInt();
		System.out.print("请输入月份:");
		int month=in.nextInt();
		System.out.println(year+"年"+month+"月"+"日历如下:");
		for(int i=1900;i<year;i++) {
			if((i%4==0)&&(i%100!=0)||(i%400==0)) {
				sumDay+=366;
			}else {
			sumDay+=365;
			}
		}
		
		for(int j=1;j<month;j++) {
			if(j==4||j==6||j==9||j==11) {
				sumDay+=30;
				
			}else if(j==2) {
				if((year%4==0)&&(year%100!=0)||(year%400==0)) {
				sumDay+=29;
				}else {
				sumDay+=28;
				}
				}else {
				sumDay+=31;
				}
		}
		/*以上代码计算1900年1月1号到输入的年月的总天数,如输入2018和8,则计算1900.1.1-2018.7.31的天数*/
		
		int xingQi=(sumDay+1)%7;
		/*xingQi用来计算输入的月份1号星期几*/
		int everydayXingQi=sumDay+1;
		int monthDay;//用来接收每月几天
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		
			if(month==4||month==6||month==9||month==11) {
				monthDay=30;
				
			}else if(month==2) {
				if((year%4==0)&&(year%100!=0)||(year%400==0)) {
					monthDay=29;
				}else {
					monthDay=28;
				}
				}else {
					monthDay=31;
				}
		
		
		for(int i=0;i<xingQi;i++) {    //输出每月1号前的空格
			System.out.print("\t");
		}
		for(int i=1;i<=monthDay;i++) {  //输出每个月的天数和控制换行
			if(everydayXingQi%7==6) {
				System.out.print(i+"\n");
			}else {
				System.out.print(i+"\t");
			}
			everydayXingQi++;
			
		}
	}
}

下面是优化后的代码,更简洁:

import java.io.*;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
public class Test {
    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = in.nextInt();
        System.out.print("请输入月份:");
        int month = in.nextInt();
        System.out.println(year + "年" + month + "月" + "日历如下:");

        LocalDate endDate = LocalDate.of(year, month, 1);//设置输入的日期
        LocalDate startDate = LocalDate.of(1900, 1, 1);
        long sumDay = startDate.until(endDate, ChronoUnit.DAYS);//总相差的天数:3657
        /*以上代码计算1900年1月1号到输入的年月的总天数,如输入2018和8,则计算1900.1.1-2018.7.31的天数*/

        long xingQi = (sumDay + 1) % 7; //xingQi用来计算输入的月份1号星期几
        long everydayXingQi = sumDay + 1;
        int monthDay = endDate.lengthOfMonth();//用来接收输入的月份有几天
        System.out.println("日\t一\t二\t三\t四\t五\t六");

        for (int i = 0; i < xingQi; i++) {    //输出每月1号前的空格
            System.out.print("\t");
        }
        for (int i = 1; i <= monthDay; i++) {  //输出每个月的天数和控制换行
            if (everydayXingQi % 7 == 6) {
                System.out.print(i + "\n");
            } else {
                System.out.print(i + "\t");
            }
            everydayXingQi++;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值