日历

使用Java技术实现电子日历,需求为从控制台输入年份与月份后,控制台输出该月的日历信息。

思路提示:

判断该年份是否是闰年。 计算该月的天数。 计算出该月第一天是星期几。 计算方法,1900-1-1至查询月份第一天过去的天数除以7的余数即查询月份第一天的“星期数”(例如,余数为1则当月第一天是星期一,余数为2则当月第一天是星期2,依次类推,余数0是查询月的第一天就是星期日) 格式化输出该月日历。 注:必须使用的Java语句包括:for / if / switch

package com.hpeu.leon.netclass.practice;

import java.util.Calendar;
import java.util.Scanner;

public class MyCalendar {
    public static int weekDay(Calendar cal)  
	{  
	    int weekday = cal.get(Calendar.DAY_OF_WEEK);  
	    if (weekday == 1)// 西方星期日为第一天,星期一为第二天  
	        weekday = 7;  
	    else  
	        weekday -= 1;  
	    return weekday;  
	}  
	
	public void calendar(int year, int month)  
	{  
	    Calendar firstcal = Calendar.getInstance();  
	    Calendar lastcal = Calendar.getInstance();  
	    System.out.println("\t\t" + year + "年" + month + "月");  
	    System.out.println("周日\t周一\t周二\t周三\t周四\t周五\t周六");  
	    firstcal.set(year, month - 1, 1);// 所求月的第一天  
	    int dateofmonth = firstcal.getActualMaximum(Calendar.DATE);// 获取该月的天数  
	    lastcal.set(year, month - 1, dateofmonth);// 所求月的最后一天  
	  
	    // 获取所求月第一天是星期几,输出是中文的而不是数字的  
	    // SimpleDateFormat fm = new SimpleDateFormat("E");  
	    // System.out.println(fm.format(firstcal.getTime()));  
	  
	    int weekofmonth = firstcal.getActualMaximum(Calendar.WEEK_OF_MONTH);// 获取该月的星期数  
	    String[][] week = new String[weekofmonth][7];  
	    int firstday = MyCalendar.weekDay(firstcal); // 获取所求月第一天是星期几  
	    int lastday = MyCalendar.weekDay(lastcal); // 获取所求月最后一天是星期几  
	    int m = 1, f = 1;// f的作用主要是判断是否需要将第一个星期归到中间几个星期一起计算  
	    int j;  
	    // 第一个星期  
	    if (firstday == 7)  
	    {  
	        f = 0;  
	        } else  
	    {  
	        for (j = 0; j < firstday; j++)  
	        {  
	            week[0][j] = " ";  
	            System.out.print(week[0][j] + "\t");  
	        }  
	        for (j = firstday; j < 7; j++)  
	        {  
	            week[0][j] = m + "";  
	            m++;  
	            System.out.print(week[0][j] + "\t");  
	        }  
	        System.out.println();  
	    }  
	    // 中间的几个星期  
	    for (int i = f; i < weekofmonth - 1; i++)  
	    {  
	        for (j = 0; j < 7; j++)  
	        {  
	            week[i][j] = m + "";  
	            m++;  
	            System.out.print(week[i][j] + "\t");  
	        }  
	        System.out.println();  
	    }  
	    // 最后一个星期  
	    if (lastday == 7)  
	    {  
	        week[weekofmonth - 1][0] = m + "";  
	        System.out.print(week[weekofmonth - 1][0] + "\t");  
	    } else  
	    {  
	        for (j = 0; j <= lastday; j++)  
	        {  
	            week[weekofmonth - 1][j] = m + "";  
	            m++;  
	            System.out.print(week[weekofmonth - 1][j] + "\t");  
	        }  
	    }  
	}  
	
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCalendar mycal = new MyCalendar();  
	    Scanner input = new Scanner(System.in);  
	    System.out.println("<<<<<<<<<<<<<<欢迎使用万年历>>>>>>>>>>>>>>");  
	    System.out.print("请选择年份:");  
	    int year = input.nextInt();  
	    System.out.print("请选择月份:");  
	        int month = input.nextInt();  
	    mycal.calendar(year, month);  
	}

}

转载于:https://my.oschina.net/u/3804571/blog/1649150

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值