PermanentCalendar.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package cn.com.lzt.common.util.calendar;
  2. // 网络代码示例
  3. /*
  4. * 输出万年历
  5. * 设定1900.01.01为起点
  6. 网络代码示例
  7. */
  8. import java.util.Scanner;
  9. public class PermanentCalendar {
  10. static boolean LeapYear(int year){ //判断闰年
  11. if(year%400==0 || (year%4==0 && year%100!=0)){ //是闰年
  12. return true;
  13. }
  14. else{
  15. return false;
  16. }
  17. }
  18. static final int N = 1900; //用N表示起始年份
  19. public static void main(String[] args){
  20. int n = 1;//1900年1月1日 是星期一
  21. int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用来存储月份的天数
  22. int year[] = new int[1001]; //用来存储每年1月1日是星期几
  23. year[0] = n;
  24. for(int i=1;i<year.length;i++){
  25. int days = 365;
  26. if(LeapYear(i+N-1)){//如果它的前一年是闰年则需要加366
  27. days = 366;
  28. year[i] = (year[i-1] + days)%7;
  29. }
  30. else{
  31. year[i] = (year[i-1] + days)%7;
  32. }
  33. }
  34. /*
  35. for(int i=0;i<10;i++){
  36. System.out.println(year[i]);
  37. }
  38. */
  39. int Month ,Year;
  40. Scanner in = new Scanner(System.in);
  41. System.out.println("请输入年份在(1900~2900之间):");
  42. Year = in.nextInt();
  43. if(Year>2900 || Year<1900){
  44. System.out.println("输入年份不合法,请重新输入!");
  45. return;
  46. }
  47. //System.out.println(year[Year-1970]);
  48. System.out.println("请输入月份(1~12之间):");
  49. Month = in.nextInt();
  50. if(Month>12 || Month<1){
  51. System.out.println("输入月份不合法,请重新输入!");
  52. return;
  53. }
  54. System.out.println("星期日 " +"星期一 "+"星期二 "+"星期三 "+"星期四 "+"星期五 "+"星期六 ");
  55. System.out.println();
  56. if(LeapYear(Year)){ //如果是闰年,2月改为29号
  57. month[2] = 29;
  58. }
  59. int day=0; //用来记录当前月的一号是今年的第几天
  60. for(int i=1;i<Month;i++){
  61. day = day + month[i];
  62. }
  63. day = (year[Year-N]+day)%7;
  64. for(int i=0;i<7;i++){//输出控制
  65. if(day == i){
  66. System.out.print(" " + 1 + " ");
  67. if(day == 6){
  68. System.out.println();
  69. }
  70. break;
  71. }
  72. else{
  73. System.out.print(" ");
  74. }
  75. }
  76. for(int i=2;i<=month[Month];i++){
  77. if(i<10){
  78. System.out.print(" " + i + " ");
  79. }
  80. else{
  81. System.out.print(" " + i + " ");
  82. }
  83. if((day+i-1)%7 == 6){
  84. System.out.println();
  85. }
  86. }
  87. }
  88. }