Java萬年歷,輸入年月獲取該年月日歷表


  1 //輸入年份和月份,打印出這個月的日歷表
  2 /*
  3     1.1900年1月1日是星期一
  4     2.計算輸入的年份距離1900年有多少天再計算當年1月1日距這個月有多少天
  5         1)
  6     3.總天數%7得出從星期幾開始
  7     注:計算機中的時間最小到1900年,此外UNIX系統認為1970年1月1日0點是時間紀元。
  8     so,在本程序中不考了1900年以前的年份了。有興趣的可以自己研究下。
  9 */
 10 import java.util.Scanner;
 11 class Calender{
 12 
 13     public static void main(String[] args){
 14         
 15         print();
 16 
 17     }
 18 
 19     //打印輸出
 20     public static void print(){
 21         Scanner sc = new Scanner(System.in);
 22         System.out.println("請輸入年份:");
 23         int year = sc.nextInt();
 24         System.out.println("請輸入月份(1~12):");
 25         int month = sc.nextInt();
 26 
 27         int days = getDays(year, month);//getDays方法詳細請往下看
 28         //days+1:day是總天數,輸入月份的總天數只是這個月之前的天數,
 29         //加上1變為這個月開始的第一天
 30         int week = days%7==0?1:days%7+1;//開始的第一天是星期幾
 31         System.out.println("日\t一\t二\t三\t四\t五\t六");
 32         
 33         //輸出第一行(第一個星期)空出來部分
 34         for(int i=1; i<=week; i++){
 35             System.out.print(" \t");
 36         }
 37 
 38         //輸出第一行(第一個星期)各天
 39         for(int i=1; i<=7-week; i++){
 40             System.out.print(i+"\t");
 41         }
 42 
 43         System.out.println();
 44 
 45         //1~12月的個月天數
 46         int monthDay = 0;
 47         switch(month){
 48                 case 2:
 49                     if(year%4==0&&year%100!=0 || year%400==0 ){
 50                         monthDay=29;
 51                     }else{
 52                         monthDay=28;
 53                     }
 54                     break;
 55 
 56                 case 4:
 57                 case 6:
 58                 case 9:
 59                 case 11:
 60                     monthDay=30;
 61                     break;
 62 
 63                 default :
 64                     monthDay=31;
 65                     break;
 66             }
 67 
 68         //輸出剩下的日期,從第二周開始了,所以是8-week
 69         for(int i=8-week; i<=monthDay; i++){
 70     
 71             System.out.print(i+"\t");
 72             
 73             //每七天換一行則當日期能整除7就換行
 74             if((i+week)%7==0){
 75                 System.out.println();
 76             }
 77         }
 78 
 79 
 80     }
 81 
 82     /*
 83         計算當年當月的距1900年1.1的總天數
 84     */
 85     public static int getDays(int year, int month){
 86         //判斷這年是閏年或者平年,得到年的總天數
 87         int day1=0, day2=0;
 88 
 89         for(int i=1900; i<year; i++){
 90             if(i%4==0&&i%100!=0 || i%400==0){
 91                 day1+=366;
 92             }else{
 93                 day1+=365;
 94             }
 95         }
 96     
 97         //得到月的總天數
 98         for(int i=1; i<month; i++){
 99             switch(i){
100                 case 2:
101                     if(year%4==0&&year%100!=0 || year%400==0 ){
102                         day2+=29;
103                     }else{
104                         day2+=28;
105                     }
106                     break;
107 
108                 case 4:
109                 case 6:
110                 case 9:
111                 case 11:
112                     day2+=30;
113                     break;
114 
115                 default :
116                     day2+=31;
117                     break;
118             }
119         }
120     
121         return day1+day2;
122 
123     }
124     
125 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM