Java实现万年历/日历

问题:输入年份和月份,显示本月的日历(本日历是从1900年开始)

核心:1900年1月1日是星期一(计算到要显示的年月的总天数 --> (总天数+1)%7 --> 就是要显示的那个月1号前面要空几个格,然后一次输出)

  • 平年有365天,闰年有366天。
  • 4﹑6﹑9﹑11为小月30天,1﹑3﹑5﹑7﹑8﹑10﹑12为大月31天, 平年2月为28天,闰年2月为29天。
  • 闰年的计算方法:
    ①、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
    ②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
package com.whsxt.years;import java.util.Scanner;public class Test {public static void main(String[] args) {boolean yearOrdinary, yearLeap; // 平年,闰年int yearMultiple, yearRemainder; // 倍数,余数int allDays;// 每个月的天数int month1Days = 31, month3Days = 31, month5Days = 31, month7Days = 31, month8Days = 31, month10Days = 31,month12Days = 31;int month4Days = 30, month6Days = 30, month9Days = 30, month11Days = 30;int month2Days;int spaceDays;int monthDays = 0;Scanner input = new Scanner(System.in);System.out.print("请输入年(范围1900年及之后):");int year = input.nextInt();System.out.print("请输入月(范围1--12月):");int month = input.nextInt();input.close();// 判断平年还是闰年if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400) {yearOrdinary = false;yearLeap = true;month2Days = 29;} else {yearOrdinary = true;yearLeap = false;month2Days = 28;}yearMultiple = (year - 1900) / 4;yearRemainder = (year - 1900) % 4;allDays = (3 * 365 + 366) * yearMultiple; // 1461if (1 == (year - 1900) % 4) {allDays += 365;} else if (2 == (year - 1900) % 4) {allDays += 365 + 365; // 730} else if (3 == (year - 1900) % 4) {allDays += 365 + 365 + 365; // 1095}// 判断月份switch (month - 1) {case 12:allDays += month12Days;case 11:allDays += month11Days;case 10:allDays += month10Days;case 9:allDays += month9Days;case 8:allDays += month8Days;case 7:allDays += month7Days;case 6:allDays += month6Days;case 5:allDays += month5Days;case 4:allDays += month4Days;case 3:allDays += month3Days;case 2:allDays += month2Days;case 1:allDays += month1Days;break;default:break;}switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:monthDays = 31;break;case 4:case 6:case 9:case 11:monthDays = 30;break;case 2:monthDays = month2Days;break;}// 空的天数spaceDays = (allDays + 1) % 7;// 输出日历System.out.println("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");for (int j = spaceDays - 1; j >= 0; j--) {System.out.print("\t");}for (int i = 1; i <= monthDays; i++) {spaceDays++;System.out.print(i + "\t");if (0 == (spaceDays) % 7) {System.out.println();}}}
}

运行截图如下:

import java.util.Scanner;/*** 步骤实现:*   1)通过Scanner获取用户输入的年(year)和月(month)*   2)获取year年month月的1号是星期几。*     思路:1900年1月1号为星期一。*       问题:怎么计算year年month月的1号是星期几??需要计算1号前面有几个空格*      解决:a)获取[1900年1月, year年month月)之间的总天数,假设总天数为allDays*            i)获取[1900年, year年)的总天数,yearDays*             ii)获取[year年1月, year年month月)的总天数,monthDays*           b)allDays%7+1就是year年month月1号前面的空格数。  *     假设:用户输入为:1900年3月,那么就需要获取[1900年1月,1900年3月)之间的总天数*   3)获取year年month月的总天数      *   4)实现日历的布局操作。**/
public class Test2 {public static void main(String[] args) {// 1.通过Scanner获取用户输入的年(year)和月(month)Scanner input = new Scanner(System.in);System.out.print("请输入年:");int year = input.nextInt();System.out.print("请输入月:");int month = input.nextInt();// 2.获取[1900年1月, year年month月)之间的总天数// 2.1获取[1900年, year年)的总天数int yearDays = 0; // 用于保存年的总天数// 遍历[1900, year)之间的年份for(int i = 1900; i < year; i++) { // i指的是[1900, year)// 判断闰年还是平年if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {yearDays += 366;}else{yearDays += 365;}}// 2.2获取[year年1月, year年month月)的总天数// 定义一个变量,用于累加[year年1月, year年month月)的总天数int monthDays = 0;// 定义一个变量,用于保存year年month月的总天数int monthDay = 0;for(int i = 1; i <= month; i++) { // 判断year年i月对应的天数为多少switch(i) {case 1: case 3: case 5: case 7: case 8: case 10:case 12:monthDay = 31;break;case 4: case 6: case 9: case 11:monthDay = 30;break;case 2:if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {monthDay = 29;}else {monthDay = 28;}break; }// monthDay保存的就是year年i月的总天数if(i != month) { // 累加月份总天数的时候,需要排除month月monthDays += monthDay;}}// 3.实现对日历的布局// 3.1输出星期几System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");// 3.2输出year年month月的1号前面有多少空格// 计算需要的空格数int temp = (yearDays + monthDays ) % 7 + 1;// 输出空格for(int i = 0; i < temp; i++) {System.out.print(" \t");}// 3.3显示当前月的天数for(int i = 1; i <= monthDay; i++) {System.out.print(i + "\t");// 换行if((temp + i) % 7 == 0) {System.out.println();}}}
}

Java实现万年历/日历相关推荐

  1. java 简单万年历_JAVA实现的简单万年历代码

    本文实例讲述了JAVA实现的简单万年历.分享给大家供大家参考,具体如下: import java.util.Scanner; public class PrintCalendar { public s ...

  2. java打印输出万年历_用Java编程输出万年历的功能实现

    1.功能实现 输入1查看上个月日历 输入2查看下个月日历 输入3查看去年本月日历 输入4查看明年本月日历 输入5查看指定月份日历 2.代码所导入的包 import java.text.ParseExc ...

  3. java 简单万年历_java简单万年历

    Java万年历源代码_幼儿读物_幼儿教育_教育专区.. import java.awt.*; import java.awt.event.*; import javax.swing.*; import ...

  4. java打印输出万年历_Java基础之打印万年历的简单实现(案例)

    Java基础之打印万年历的简单实现(案例) 问题:输入年,月,打印对应年月的日历. 示例: 问题分析: 1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星 ...

  5. java万能万年历的程序,java 实现万年历

    以前初学java写万年历,都是采用基本的算法求出是否闰年闰月 计算公式如下 int year = 2014, month = 8, total = 0; if (month == 1 || month ...

  6. 利用Java输出电子日历

    /** 时间:2018-3-25* 目的:practice* 内容:利用Java输出电子日历* 使用Java技术实现电子日历,需求为从控制台输入年份与月份后,控制台输出该月的日历信息.* */ pac ...

  7. 二、Java之万年历

    文章目录 二.Java之万年历 2.1 要求 2.2 思路 2.3 源代码 2.4 结果截图 二.Java之万年历 2.1 要求 输入年份: 输入月份: 输出某年某月的日历. 2.2 思路 实现从控制 ...

  8. java题目 万年历 计划书,Java版万年历设计报告及流程图

    <Java版万年历设计报告及流程图>由会员分享,可在线阅读,更多相关<Java版万年历设计报告及流程图(7页珍藏版)>请在人人文库网上搜索. 1.Java课程设计题目 万年历 ...

  9. java记事本获取当前时间_calendar 用Java写的日历,有查询时间日期,还有记事本以及到点提醒功能。 Develop 238万源代码下载- www.pudn.com...

    文件名称: calendar下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 4465 KB 上传时间: 2013-06-30 下载次数: 3 提 供 者: 陈园园 ...

最新文章

  1. 计算机文档里的东西可以删吗,电脑c盘哪些文件可以删除
  2. hdu4503 概率
  3. Android最佳性能实践(二)——分析内存的使用情况
  4. 【实战 Ids4】║ 认证中心之内部加权
  5. python定义符号常量_python从零开始学习(二):python中的变量与常量
  6. ADS仿真设计AB类射频功率放大器
  7. 基于MATLAB的汽车出入库计时系统 _matlab课程设计
  8. 数据通路功能——单总线
  9. c++ 与 duckduckgo
  10. 关于传奇自动触发的几个常用脚本OnKillMob、StdModeFunc、等触发事件
  11. 单片机 AD/DA数模转换
  12. 【Jmeter】Jmeter登录带验证码平台
  13. mysql常用表名大全_MySQL常用系统表大全
  14. 众筹源码 php,助创cms众筹源码系统v1.0
  15. OpenCV彩色图像读取
  16. 如何在ios app 局域网内搜索到设备
  17. android中高级面试题,Android高级工程师必看系列
  18. linux dns chroot,chroot环境下dns解析不好用
  19. 3DMAX入门教程 | 命令面板 标准基本体的创建和参数
  20. USNews:2019世界大学排行榜

热门文章

  1. 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
  2. 光学定位与追踪技术_解析两大主流追踪技术——Inside-out 和 Outside-in
  3. Android读取Mp3音乐文件的方法
  4. CVPR2022 ReID方向接收论文
  5. 201811找工作静态脱壳机效果演示
  6. ARC Welder——Android 模拟器——App Runtime for Chrome
  7. 输入一个班级全体学生的成绩,输出不及格的学生成绩和及格学生的平均成绩
  8. 我要当程序员,但我没有任何基础,请问要学什么?
  9. 阿里云CDN上线 WAF,一站式提供分发+安全能力
  10. 有关于Sql中in的用法