一、概念

动态日历顾名思义就是用户从控制台输入年份月份,控制台可输出当前输入年份月份的月日历。

二、难点

此问题的难点在于判断输入年份月份的第一天为星期几与本月的天数,解决这两个问题之后,就可以根据这两个数输出当月的日历了。

三、基本思路

我解决这个问题的基本思路是:

1.设定一个基准日期,计算该日到输入月份第一天的时间差,用该时间差取余7,即可知道输入月份第一天是星期几。本代码段设置的基准日期为1900年1月1日,适于输出1900年之后的日历,对于1900年以前的日历,输出会有误差。。。(Ps.Win10自带日历起始日期为1921年1月1日,这也告诉我们,时代是向前看的(●'◡'●))

2.时间差计算

假设我想输入2021年7月的日历,那么这里计算1900年1月到2021年的时间差,我采取的方法是

(1)首先计算1900年1月至2020年12月所包含的天数,即1900年至输入年份前一年的总天数,我认为这样做的好处在于,这段时间内12个月份都是完整的,我只需要判断年份是不是闰年,决定当年是365天还是366天,加到时间间隔即可;

(2)计算当前年份所含的天数。

3.输出日历

(1)用制表符/t输出日历表头

(2)假设当月一号是星期四,则先输出三个空制表位,从第四个制表位时输出日期,一行七个,输完换行

Created By DoubleNice
import java.util.Scanner;public class Calendar {/*根据一个年份一个月份显示当前月份的日历布局(编写一个动态日历)1900.1.1是星期一基本思路:计算输入的年月与1900.1.1相距的天数,用来判断in.1号是星期几根据输入的年份月份逐渐回退到1900.1月1日,计算出相差天数用天数%7,余几,一号就行星期几*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入要查询的年 月");int inYear = sc.nextInt(), inMonth = sc.nextInt();int YEAR = 1900, MONTH = 1, betDay = 0, monthDay = 31;//计算输入的月份有多少天,默认为12月的天数,betDay为间隔天数int midYear = YEAR, midMonth = MONTH;//两个参数为计算天数时使用的工具for (; midYear < inYear; midYear++) {//当年以前的天数混在一起算,反正1-12月都要算if (midYear % 400 == 0 || (midYear % 4 == 0 && midYear % 100 != 0))  betDay += 366;else betDay += 365;//如果是闰年,betDay增加366天,否则增加365天}for (midMonth = 1; midMonth <= inMonth; midMonth++) {//当年的天数拿出来算switch (midMonth) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:betDay += 31;monthDay = 31;//记录下当前月的天数break;case 4:case 6:case 9:case 11:betDay += 30;monthDay = 30;break;case 2:if (midYear % 400 == 0 || (midYear % 4 == 0 && midYear % 100 != 0)) {betDay += 29;monthDay = 29;break;} else {betDay += 28;monthDay = 28;break;}}}betDay = betDay + 1 - monthDay;//算完了inYear年inMonth月之前的全部天数,计算inMonth月1日就要加一天int week = betDay % 7, i = 0, num = 0;//天数取余等于星期几,0则为星期一,num记录总共输出了多少个字符(每月1号之前的日期都要用tab代替)System.out.println(inYear + "年" + inMonth + "月1日是星期" + week);System.out.println("\t\t" + inYear + "年" + inMonth + "月");System.out.println("日\t一\t二\t三\t四\t五\t六\t");for (i = 0; i < week; i++) {//每月1号之前的日期都要用tab代替System.out.print("\t");num++;}for (i = 1; i <= monthDay; i++) {num++;System.out.print(i + "\t");if (num % 7 == 0) System.out.println("");}}
}

测试一下:

第一次写博客,第一次发CSDN,希望大家多多支持,多多批评指正o(* ̄▽ ̄*)ブ!

用Java实现动态日历相关推荐

  1. java 动态日历的实现

    java 动态日历的实现 动态日历 动态日历要求打印指定年份和指定月份的日历展示界面,可显示星期与日期信息.动态日历集合了java众多基础语法,包括数据类型.条件分支.循环语句.运算符.面向对象 .类 ...

  2. java怎么写桌面日历_基于java的桌面日历系统的设计与实现毕业设计论文最终版.doc...

    基于java的桌面日历系统的设计与实现毕业设计论文最终版 分类号_______________ 密级________________ UDC _______________ 学号_ ___ 毕业设计( ...

  3. 设计模式总结——代理模式以及java的动态代理

    定义 给目标对象一个代理对象,并由代理对象控制对目标对象的引用.联想到生活中就像是海外代购 既然是代理,就说明他要做的事情要比你直接去做要做的多,这就联系到了方法的增强,也就联系到了AOP,面向切面. ...

  4. java实现动态上传多个文件并解决文件重名问题

    java实现动态上传多个文件并解决文件重名问题 参考文章: (1)java实现动态上传多个文件并解决文件重名问题 (2)https://www.cnblogs.com/skycodefamily/p/ ...

  5. java的动态代理机制详解

    2019独角兽企业重金招聘Python工程师标准>>> 参考资料 1.java的动态代理机制详解 转载于:https://my.oschina.net/Howard2016/blog ...

  6. 代理模式及Java实现动态代理

    代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 代理模式UML图 在上图中: RealSubject 是原对象 ...

  7. OSGI 面向Java的动态模型系统

    OSGI (面向Java的动态模型系统) OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSG ...

  8. 利用JNative实现Java调用动态库

    由于项目要求,需要用Java调用windows的dll文件,查了一下,如果用JNI的话是比较麻烦的,在sourceforge.net上搜索了一下 "Java dll",首先出现的是 ...

  9. 看完Java的动态代理技术——Pythoner笑了

    Java的动态代理常用来包装原始方法调用,用于增强或改写现有方法的逻辑,它在Java技术领域被广为使用,在阿里的Sofa RPC框架序列化中你能看到它的身影,Hibernate的实体类功能增强也是以动 ...

最新文章

  1. 太阳能工程联箱知识_暖通设计|太阳能热水系统设计参考手册(供参考)
  2. 信息学奥赛一本通 1107:校门外的树 | 1931:【05NOIP普及组】校门外的树 | OpenJudge NOI 1.6 06 | 洛谷 P1047 [NOIP2005 普及组] 校门外的树
  3. 问答系统设计的一些思考
  4. vuedraggable嵌套块拖拽_Vue 基于 vuedraggable 实现选中、拖拽、排序效果
  5. (46)VHDL实现4位桶性形移位器
  6. 台式计算机 一万元,一万元左右i7-8700K/Z370/GTX1070Ti水冷游戏台式电脑主机配置推荐(2)...
  7. 工欲善其事,必先利其器——图文并茂详解VisualStudio使用技巧一
  8. 华为PPPoE、PPP/MP、IP-Trunk配置
  9. disallow: /index.php?,那位高手知道robots文件的正确写法。我在网上看到两种说法。一种是 user-agent:* Disallow:/flims...
  10. android测试内存的软件下载,AndroBench p10内存门app下载
  11. BAT程序员轻轻松松拿20k?学会这些涨薪秘籍你也行!
  12. 华为员工晒出7天的上班打卡记录,网友:福报满满!
  13. 实现动态表单功能设计思路
  14. 简单的学生网页作业源码 基于html css javascript仿淘宝购物商城设计毕业论文源码
  15. nginx正向代理访问微信接口502错误, Unable to tunnel through proxy. Proxy returns \“HTTP/1.1 502 Bad Gateway\
  16. iphone4s显示问题
  17. 完全用Python工作
  18. 一元线性回归及Excel回归分析
  19. android通讯录demo
  20. SSH协议及SSH工具

热门文章

  1. 游戏代码-LOL卡萨丁斩杀伤害计算器
  2. 在英语中什么词可以用作定语
  3. 云原生加速器企业维格表创始人陈霈霖:提供人人可用的数字化转型全新方案,真正驱动组织创新
  4. Hacking Diablo II之外挂的工作原理
  5. delphi fmx 俄罗斯方块,超爽
  6. TIDB手动降级(原版本v6.0.0,重装v5.4.1)
  7. 镁光 M4 128G 在H61 上IDE,AHCI测试
  8. [安全分析报告]门磁报警系统破解猜想
  9. 英雄联盟极速下载提取下载地址
  10. python预测模型各国pm2.5年平均值_用scikit-learn来预测北京的pm2.5