【Java自学】 打印日历信息

  1 package codeTask_FangFa;
  2 //                                                                            5.34  使用zeller公式,打印某年某月的日历信息。
  3 import java.util.Scanner;
  4 public class PrintRiLi {
  5        public static void main(String[] args){
  6            Scanner input = new Scanner(System.in);
  7            System.out.println("请输入需要打印日历的年份:");
  8            int year = input.nextInt();
  9            System.out.println("请输入需要打印日历的月份:");
 10            int month = input.nextInt();
 11            printTitle(year,month);
 12            printBody(year,month);
 13
 14        }
 15
 16        public static void printTitle(int year,int month){                           //第二战场--头
 17            System.out.println("                                                      日             历");
 18            System.out.println("                            "+getMonth(month)+"                                "+year);
 19            System.out.println("        星期日     星期一    星期二    星期三    星期四    星期五    星期六");
 20            System.out.println("--------------------------------------------------");
 21        }
 22
 23        public static String getMonth(int month){                            // 这就不说啥了
 24
 25            switch(month){
 26            case 1:return "一月";
 27            case 2:return "二月";
 28            case 3:return "三月";
 29            case 4:return "四月";
 30            case 5:return "五月";
 31            case 6:return "六月";
 32            case 7:return "七月";
 33            case 8:return "八月";
 34            case 9:return "九月";
 35            case 10:return "十月";
 36            case 11:return "十一月";
 37            case 12:return "十二月";
 38            }
 39            System.out.println("输入的月份出错,程序退出!");
 40            System.exit(0);
 41            return "-1";
 42        }
 43
 44        public static void printBody(int year,int month){                                                     //主战场--可要看仔细了。
 45            int count = getXingQi(year,month);
 46            int nim = getNumberInMonth(year,month);                           // nim  全拼是 number in month.
 47            int day = 1;                                                             //每月的日子,从 1 开始。
 48            switch (count){
 49            case 0 : count = 1;break;
 50            case 1 : count = 2;break;
 51            case 2 : count = 3;break;
 52            case 3 : count = 4;break;
 53            case 4 : count = 5;break;
 54            case 5 : count = 6;break;
 55            case 6 : count = 7;break;
 56            }
 57            for(int i =1;i<count;i++){
 58                 System.out.printf("%7s"," ");
 59             }
 60             while(day<nim){
 61
 62                 while(count%7!=0){
 63                     System.out.printf("%7d",day);
 64                     if(day==nim)
 65                         System.exit(0);
 66                     count++;
 67                     day++;
 68
 69                 }
 70                 System.out.printf("%7d\n",day);
 71                 count++;
 72                 day++;
 73
 74             }
 75
 76            }
 77
 78
 79        public static int getXingQi(int year,int month){                                                       //得到某月1号是星期几。 这里会用到zeller公式。
 80            int m = month;
 81            if(month == 1){
 82                m = 13;
 83                year--;
 84            }
 85            else if(month ==2){
 86                m = 14;
 87                year--;
 88            }
 89            int d = 1;
 90            int c = year/100;
 91            int y = year%100;
 92            int w1 =  y+y/4+c/4-2*c+26*(m+1)/10+d-1;
 93            int w = (w1%7+7)%7;
 94            return w ;
 95        }
 96
 97        public static int getNumberInMonth(int year,int month){                                //返回某月共有几天。
 98            if(isRunNian(year)){
 99                switch (month){
100                case 1 : return 31;
101                case 2 : return  29  ;
102                case 3 : return  31  ;
103                case 4 : return  30  ;
104                case 5 : return  31  ;
105                case 6 : return  30  ;
106                case 7 : return  31  ;
107                case 8 : return  31  ;
108                case 9 : return  30  ;
109                case 10 : return  31  ;
110                case 11: return   30 ;
111                case 12 : return  31  ;
112                }
113            }
114            else{
115                switch (month){
116                case 1 : return 31;
117                case 2 : return  28  ;
118                case 3 : return  31  ;
119                case 4 : return  30  ;
120                case 5 : return  31  ;
121                case 6 : return  30  ;
122                case 7 : return  31  ;
123                case 8 : return  31  ;
124                case 9 : return  30  ;
125                case 10 : return  31  ;
126                case 11: return   30 ;
127                case 12 : return  31  ;
128                }
129            }
130            return -1;                                                              //错误情况下的返回值。
131        }
132
133        public static boolean isRunNian(int year){                                    //判断闰年。是就true
134            if(year%400==0||(year%4==0&year%100!=0))
135                return true;
136            return false;
137        }
138 }
时间: 2024-10-24 10:24:22

【Java自学】 打印日历信息的相关文章

Java实现打印日历的功能

编写一个程序,显示给定年月的日历.程序提示用户输入年份和月份,然后显示该月的整个日历. 代码: 1 import java.util.Scanner; 2 public class PrintCalendar{ 3 public static void main(String[] args){ 4 Scanner input=new Scanner(System.in); 5 6 System.out.print("Enter full year(e.g.,2011): "); 7 i

java打印日历方法

package cn.baokx.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class Test { public static void main(String ... args) { String dat

java 实现打印当前月份的日历

实现当前日历的打印,当前日期用*来表示. 关键得出这个月的第一天是星期几. 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数+1,m表示月份数,y表示年数. 注意1:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月, 例:如果是2004-1-10则换算成:2003-13-10来代入公式计算. 注意2:在大多数天主教国家的日历中,在1752年没有9.3-9.13,在这一年的日历中9月

使用java 打印日历

package hangshu; /* * 打印从1900年到2.year年的日历 */ import java.util.Scanner; public class Calender { public static int year = Integer.MIN_VALUE; public static int month = Integer.MIN_VALUE; private static int[] m = {31,28,31,30,31,30,31,31,30,31,30,31}; pu

【转】JAVA自学之路

JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好处,并不能说明大的趋势. 一些新闻文章很有可能是枪手写的,不必太过相信.国外背景的

[转载] JAVA自学之路

原文链接http://blog.csdn.net/mengxin846/article/details/2219844 虽然文章有点旧但还是有些启发的,譬如要事第一,好读书不求甚解. JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当 成学生

马士兵:JAVA自学之路

JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训.决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢?我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好处,并不能说明大的趋势.一些新闻文章很有可能是枪手写的,不必太过相信.国外背景的教师和课

Hadoop源码学习笔记(2) ——进入main函数打印包信息

Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: public static void main(String args[]) {     try {       StringUtils.startupShutdownMessage(DataNode.class, args, LOG);       DataNode datanode = crea

自写打印日历类

在论坛上看到有人在问打印日历的程序,今天下午空闲的时候写了一个日历类,简单的写了几个方法. calendar.h #include <string> using namespace std; #ifndef CALENDAR_H #define CALENDAR_H class Calendar{ public: Calendar(){} void printAllMonth(const int &year); void printOneMonth(const int &yea