用java编写日历,输入年月可以显示当前月份信息

如题... 如题 展开
 我来答
静思湖黑鱼
2015-10-30
知道答主
回答量:1
采纳率:0%
帮助的人:2万
展开全部
/**
 * 日历     1900年1月1日开始
 * @author yaomingzi
 *
 */
public class Calendar {
    /**
     * 判断某一年是否是闰年
     * 是闰年返回true
     * @param year
     * @return
     */
    public static boolean isBissextile(int year) {
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            return true;
        }
        return false;
    }
    
    /**
     * 计算具体某月有多少天
     * @param month
     * @param year
     * @return
     */
    public static int daysOfmonthInyear(int month, int year) {
        int months[] = {31,29,31,30,31,30,31,31,30,31,30,31};
        //判断是否是闰年,闰年2月有29 天 
        if (isBissextile(year)) {
            months[1] = 29;
        } else {
            months[1] = 28;
        }
        return months[month - 1];
    }
    
    /**
     * 计算具体某天距离1900年1月1日有多少天数
     * @param day
     * @param month
     * @param year
     * @return
     */
    public static int daysFromNovecento(int day, int month, int year) {
        //接收天数差值
        int daysSum = 0;
        //将距离1900年的整年天数相加
        for (int i = 1900; i < year; i++) {
            //是闰年则为366天不是为365天
            daysSum += isBissextile(i) ? 366 : 365; 
        }
        //计算当年距离1月的整月天数
        for (int j = 1; j < month; j++){
            daysSum += daysOfmonthInyear(j, year);
        }
        //加上当月天数
        daysSum += day;
        return daysSum;
    }

    /**
     * <p>判断具体某天是星期几
     * <p>return 1 2 3 4 5 6 0
     * @param day
     * @param month
     * @param year
     * @return
     */
    public static int whichWeek(int day, int month, int year){
        //1900.1.1是星期一,取余得1234560分别代表星期一到星期天
        return daysFromNovecento(day, month, year) % 7;
    }

    /**
     * 打印日历 --按日历格式打印某年某月的所有日期
     * @param month
     * @param year
     */
    public static void printMonthOfYear(int month, int year){
        String []weeks = {"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
        //打印最上面的星期标记
        for (int i = 0; i < weeks.length; i++) {
            System.out.print(weeks[i] + "\t");
        }
        System.out.println();
        //计数器
        int count = 0;
        //打印当月日期前的水平制表  判断当月1号是星期几就打印几个(0表示星期天)
        for (int j = 0; j < whichWeek(1, month, year); j++) {
            System.out.print("\t");
            count++;
        }
        //循环次数为当月天数
        for (int i = 1; i <= daysOfmonthInyear(month, year); i++) {
            System.out.print(i + "\t");
            count++;
            //每打印7个打印换行
            if (count % 7 == 0) {
                System.out.println();
            }
        }
        //当所有日期打印完毕若最后一个打印后没有换行打印换行美化显示
        if (count % 7 !=0) {
            System.out.println();
        }
        System.out.println();
    }
    
    /**
     * 打印日历--按日历格式打印某一年的所有日期
     * @param year
     */
    public static void printYear(int year){
        System.out.println("\t\t\t" + year + "年");
        //循环12个月  每次调用打印月份方法
        for (int i = 1; i <= 12; i++) {
            System.out.println("\t\t\t" + i + "月");
            printMonthOfYear(i, year);
        }
    }
    //main方法 --- 测试
    public static void main(String []args) {

        System.out.println(daysFromNovecento(30, 10, 2015));
    }
    
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式