前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中calendar类打印日历_输入年份和月份求天数

java中calendar类打印日历_输入年份和月份求天数

作者头像
全栈程序员站长
发布2022-09-27 14:47:41
1.7K0
发布2022-09-27 14:47:41
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

题目

题目另可表述为: 1.输入一个年份和月份,按格式输出此月份的日历 2.以如下格式输出一个月份的日历

在这里插入图片描述
在这里插入图片描述

代码实现

1.Calendar类的一些说明

Calendar类是一个抽象类,不能通过new的方式来获得实例,可以使用类方法getInstance()返回一个Calendar的子类对象.

代码语言:javascript
复制
        Calendar calendar = Calendar.getInstance();

Calendar类的操作需要首先设定日期:

代码语言:javascript
复制
        calendar.set(year, month - 1, day);

由于Java中月份从0月开始计数,所以真实月份12月(month=12) 需要减1 才是Java中的12月

在输出日历时,只需要关注本月第一天是星期几即可,例如图中 2015年8月1日对应星期六.

在这里插入图片描述
在这里插入图片描述

这里使用方法

代码语言:javascript
复制
int startDay=calendar.get(Calendar.DAY_OF_WEEK);

得到startDay=7.说明2015年8月1日是本周的第7天. Java中规定了每周第一天是星期日,所以星期日=1,星期一=2…星期六=7

2.天数的判断

月份有大小月之分,其中大月31天,小月30天,特殊的2月有28天.闰年2月有29天.

代码语言:javascript
复制
    public static int maxDayInMonth(int year, int month) { 
   
        int max = 30;
        if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
        else if (month == 2) max = 28;
        else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
        return max;
    }

3.空格补全

在这里插入图片描述
在这里插入图片描述

如果第一天是星期六, 需要将第一周的前6天用空格补全,代表前6天来自于9月份的25-30日.

代码语言:javascript
复制
    public static void fillSpace(int startDay) { 
   
        for (int i = 1; i < startDay; i++) { 
   
            System.out.printf("%4s", " ");
        }
    }

4.日历的输出

代码语言:javascript
复制
public static void printCalender() { 
   
        int year = 2015;
        int month = 8;
        //input
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, 1);
        int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本周第一天是星期几
        int count = startDay - 1; //第一周的初始计数
        int maxDay = maxDayInMonth(year, month);
        System.out.println("Sun Mon Tue Wed Thu Fri Sat");
        fillSpace(startDay);
        for (int i = 1; i <= maxDay; i++) { 
   
            System.out.printf("%3d%s", i, " "); //使用printf函数进行格式对齐
            count++;
            if (count >= 7) { 
    //每输出7天换一次行
                count = 0;
                System.out.print('\n');
            }
        }
    }

完整代码

代码语言:javascript
复制
import java.util.Calendar;

public class LittleCode_3 { 
   

    public static void printCalender() { 
   
        int year = 2015;
        int month = 8;
        //input
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, 1);
        int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本周第一天是星期几
        int count = startDay - 1; //第一周的初始计数
        int maxDay = maxDayInMonth(year, month);
        System.out.println("Sun Mon Tue Wed Thu Fri Sat");
        fillSpace(startDay);
        for (int i = 1; i <= maxDay; i++) { 
   
            System.out.printf("%3d%s", i, " "); //使用printf函数进行格式对齐
            count++;
            if (count >= 7) { 
    //每输出7天换一次行
                count = 0;
                System.out.print('\n');
            }
        }
    }

    public static void fillSpace(int startDay) { 
   
        for (int i = 1; i < startDay; i++) { 
   
            System.out.printf("%4s", " ");
        }
    }

    public static int maxDayInMonth(int year, int month) { 
   
        int max = 30;
        if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
        else if (month == 2) max = 28;
        else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
        return max;
    }

    public static void main(String[] args) { 
   
        printCalender();
    }
}

输出结果

输入year=2015 month=8

在这里插入图片描述
在这里插入图片描述

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193281.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 代码实现
    • 1.Calendar类的一些说明
      • 2.天数的判断
        • 3.空格补全
          • 4.日历的输出
            • 完整代码
              • 输出结果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档