1. package learnExercise;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class PrintCalender {
  6.  
  7. /**
  8. * @param args
  9. */
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12. Scanner input=new Scanner(System.in);
  13.  
  14. System.out.print("Enter full year (e.g.,2001): ");
  15. int year=input.nextInt();
  16.  
  17. System.out.print("Enter month as number between 1 and 12: ");
  18. int month=input.nextInt();
  19.  
  20. printMonth(year,month);
  21.  
  22. }
  23.  
  24. private static void printMonth(int year, int month) {
  25. // TODO Auto-generated method stub
  26. printMonthTitle(year, month);
  27. printMonthBody(year, month);
  28. }
  29.  
  30. public static void printMonthTitle(int year, int month){
  31. System.out.println(" "+getMonthName(month)+" "+year);
  32. System.out.println("-------------------------");
  33. System.out.println(" Sun Mont Tue Wed Thu Fri Sat");
  34.  
  35. }
  36.  
  37. //打印月份主体
  38. public static void printMonthBody(int year,int month){
  39. int startDay=getStartDay(year, month);
  40. int numberOfDaysInMonth=getNumberOfDaysInMonth(year, month);
  41. for(int i=0;i<startDay;i++)
  42. System.out.print(" ");
  43. for(int i=1;i<=numberOfDaysInMonth;i++){
  44. System.out.printf("%4d",i);
  45. if((i+startDay)%7==0)
  46. System.out.println();
  47. }
  48. System.out.println();
  49. }
  50.  
  51. public static String getMonthName(int month){
  52. String monthName="";
  53. switch(month){
  54. case 1: monthName="January";break;
  55. case 2: monthName="February";break;
  56. case 3: monthName="March";break;
  57. case 4: monthName="April";break;
  58. case 5: monthName="May";break;
  59. case 6: monthName="June";break;
  60. case 7: monthName="July";break;
  61. case 8: monthName="August";break;
  62. case 9: monthName="September";break;
  63. case 10: monthName="October";break;
  64. case 11: monthName="Nobember";break;
  65. case 12: monthName="December";break;
  66. }
  67. return monthName;
  68. }
  69. //获取指定月份的第一天是周几
  70. public static int getStartDay(int year, int month){
  71. final int START_DAY_FOR_JAN_1_1800=8;
  72. int totalNumberOfDays=getTotalNumberOfDays(year,month);
  73.  
  74. return (totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7;
  75. }
  76. //返回总共的天数,从1800年1月1日开始计算,直到指定月份1日的前一天
  77. public static int getTotalNumberOfDays(int year,int month){
  78. int total=0;
  79. for(int i=1800;i<year;i++)
  80. if(isLeapYear(i))
  81. total=total+366;
  82. else
  83. total=total+365;
  84.  
  85. for(int i=1;i<month;i++)
  86. total=total+getNumberOfDaysInMonth(year,i);
  87.  
  88. return total;
  89. }
  90.  
  91. //返回指定月份的天数
  92. public static int getNumberOfDaysInMonth(int year,int month){
  93. int result=0;
  94. switch (month){
  95. case 1:
  96. case 3:
  97. case 5:
  98. case 7:
  99. case 8:
  100. case 10:
  101. case 12:
  102. result=31;
  103. break;
  104. case 4:
  105. case 6:
  106. case 9:
  107. case 11:
  108. result=30;
  109. break;
  110. case 2:
  111. result=isLeapYear(year)?29:28;
  112. break;
  113. }
  114. return result;
  115. }
  116.  
  117. //判断是否为闰年
  118. public static boolean isLeapYear(int year){
  119. return (year%400==0)||(year%4==0&&year%100!=0);
  120. }
  121.  
  122. }

方法抽象将程序模块化为整齐、层次分明的形式。将程序由简洁的方法构成的集合,比其他方式更容易编写、调试、维护和修改。

编写大型程序时,可以使用自顶向下或自底向上的方法,不要一次性地编写整个程序。

JAVA 打印指定月份日历的更多相关文章

  1. java获取指定月份有几个星期x,获取指定月份跨了多少个星期

    例如获取2020年5月一共有多少个星期二,一共跨了多少个星期 public class MainTest { public static void main(String[] args) throws ...

  2. java 查询指定月份的工作日(不包括法定节假日)

    /** * 日期工具类 用于获取指定月份的工作日(除去周末和法定节假日) */ public class DateUtils { public static void main(String[] ar ...

  3. java编程基础篇-------> 从键盘输入一位整数,代表月份,编程判断指定月份属于一年中的哪个季度。如果是 12 月、1 月、2 月,就属于冬季。

    从键盘输入一位整数,代表月份,编程判断指定月份属于一年中的哪个季度.如果是 12月.1 月.2 月,就属于冬季:如果是 3 月.4 月.5 月,就属于春季:如果是 6 月.7 月.8 月,就属于夏季: ...

  4. (PASS)java中打印当月的日历的每一天

      package test; import java.time.DayOfWeek; import java.time.LocalDate; /** * * @ClassName: Calendar ...

  5. Java中Calendar(日历)相关API举例

    Java中Calendar(日历)相关API举例,实现功能:输入一个年份和月份打印出这个月的日历. package calendarPrint; import java.util.Calendar; ...

  6. Java打印

    Java打印 import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Gra ...

  7. JavaScript 计算指定月份有多少天

    用 js 画工作日历的时候,需要用 js 计算指定月份一共有多少天 在网上找了些方法,都比较繁琐,后来灵机一动,想到一个偷懒的办法,分享一下 一.原理分析 要想得到某月有多少天,只需要获取到当月最后一 ...

  8. Java 打印程序设计实例

    3.1 打印文本 3.1.1 应用场景 假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印 54 行,如何实现呢? 3.1.2 解决方法 基本思路如下:首 ...

  9. PHP获取指定月份的第一天开始和最后一天结束的时间戳函数

    <?php /** * 获取指定月份的第一天开始和最后一天结束的时间戳 * * @param int $y 年份 $m 月份 * @return array(本月开始时间,本月结束时间) */ ...

随机推荐

  1. PDF 补丁丁 0.4.1 版将增加嵌入中文字库的功能

    有不少用户反映,部分老 PDF 文件由于在制作时没有嵌入字库,导致该文件在某些阅读器上显示为乱码.即使他们用 Acrobat 嵌入了相应的字库,文件仍然无法正确显示. 这些老 PDF 看起来具有如下相 ...

  2. UDPsocket编程

    socket编程UDP模式, package com.wtd.socket.udp; import java.io.IOException; import java.net.DatagramPacke ...

  3. 第三方开源水面波浪波形view:WaveView

    一个比较有趣的Android第三方开源波形view:WaveView,这种WaveView在一些常见的APP开发中,以水面波浪波形的形象的生动展示手机还剩余多少电量,存储容量还有多少等,比较形象直观生 ...

  4. [Js]碰撞运动

    描述:撞到目标点弹回来(速度反转) 一.无重力的漂浮div var div1=document.getElementById("div1"); var iSpeedX=6; var ...

  5. linux修改系统时间和linux查看时区、修改时区的方法

    一.查看和修改Linux的时区 1. 查看当前时区命令 : "date -R" 2. 修改设置Linux服务器时区方法 A命令 : "tzselect" 方法 ...

  6. C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)

    准备工作: 1.添加引用System.Web.Extensions, 2..net3.5+版本都有,如果VS2010找不到,在这个文件夹找:C:\Program Files\Reference Ass ...

  7. 单位服务器发布tomcat的项目外网访问

    首先 要有 外网IP  路由器做设置  开放端口(netstat -nao) 首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址 跟部署tomcat ...

  8. CSSOM视图模式(CSSOM View Module)相关整理(转载)

    原文地址 http://www.zhangxinxu.com/wordpress/?p=1907 一.Window视图属性 这些属性可以hold住整个浏览器窗体大小.微软则将这些API称为“Scree ...

  9. 编写一个小Servlet程序

    1.编写一个java类,此类继承HttpServlet 创建完工程(见上一篇随笔:使用eclipse创建在myeclipse中运行的web工程),在src中新建一个包,包名字叫servlet:再新建一 ...

  10. dataTable/dataSet转换成Json格式

    using System.Text;using System.Collections.Generic; 1)dataTable转Json(表格有名称:dt.TableName) public stat ...