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

java中calendar类打印日历_输入年份和月份求天数题目题目另可表述为:1.输入一个年份和月份,按格式输出此月份的日历2.以如下格式输出一个月份的日历代码实现1.Calendar类的一些说明Calendar类是一个抽象类,不能通过new的方式来获得实例,可以使用类方法getInstance()返回一个Calendar的子类对象.Calendarcalendar=Calendar.getInstance();…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

题目

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

代码实现

1.Calendar类的一些说明

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

        Calendar calendar = Calendar.getInstance();

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

        calendar.set(year, month - 1, day);

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

在输出日历时,只需要关注本月第一天是星期几即可,例如图中
2015年8月1日对应星期六.
在这里插入图片描述
这里使用方法

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天.

    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日.

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

4.日历的输出

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');
            }
        }
    }

完整代码

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.net/193281.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS7安装Nginx1.14.2[通俗易懂]

    CentOS7安装Nginx1.14.2[通俗易懂]安装make:yum-yinstallgccautomakeautoconflibtoolmake安装g++:yuminstallgccgcc-c++安装pcre和pcre-develyuminstall-ypcrepcre-devel安装zlibzlib提供了很多压缩和解方式,nginx需要zlib对http进行gzipyuminstall-…

    2022年6月5日
    30
  • android错误之解析包时出现问题(一)

    类越来越多,有点乱,强迫症,多弄了几个包,整理的井井有条,心里那个舒服,结果问题就来了无法安装了,总是显示“解析包时出现问题”,最烦的就是这种问题,一点技术含量都没有的小问题却要浪费大量时间去找原因。百度了很多,这个算是原因整理的最全的,可是一一对应着找过去,还是没发现问题http://blog.sina.com.cn/s/blog_6040e83d0100slph.html幸好我

    2022年3月10日
    43
  • ThinkPHP5+小程序商城 网盘视频

    ThinkPHP5+小程序商城 网盘视频

    2021年10月31日
    43
  • 基础教程:TCP连接的建立和释放

    基础教程:TCP连接的建立和释放

    2022年3月6日
    97
  • html5设计礼品盒效果,十大包装创意设计网站「建议收藏」

    html5设计礼品盒效果,十大包装创意设计网站「建议收藏」有时您只需要一些启发。好吧,这是10个包装创意设计网站,这些网站充满了新颖的样品和具有创意的图文信息!花一些时间筛选它们,我们确信您会充满活力,可以重新包装或开始为您的产品选择正确的方向。没有比看看其他人为解决商品销售而进行的创新设计。这10个包装设计网站将使您的创意源源不断:1.www.thedieline.com还为包装设计缺乏灵感来源烦恼吗?现在,此网站为包装创意设计的访问量最大的网站之一…

    2025年7月8日
    1
  • 常用的DNS服务器_国内目前最快的DNS

    常用的DNS服务器_国内目前最快的DNS北京联通      202.106.0.20   202.106.196.115阿里              223.5.5.5 223.6.6.6114              114.114.114.114南方电信      180.153.225.136百度              180.76.76.76360                 101.226….

    2025年8月30日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号