import java.util.Scanner;
class Calender
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("输入年份:(格式:1900-~)");
long year=input.nextLong();
if(isRunNian(year)){System.out.println("闰年");}else{System.out.println("平年");}
System.out.println("输入月份:(格式:1-12)");
int month=input.nextInt();
System.out.println(month+"月总共有:"+getDays(year,month)+"天");
System.out.println("输入日数:(格式:1-31)");
int day=input.nextInt();
System.out.println("总天数:"+getAllDays(year,month,day));
System.out.println("星期:"+getWeekDay(getAllDays(year,month,day)));
System.out.println("本月一号是星期:"+getWeekDay(getAllDays(year,month,1)));
System.out.println();
printCal(year,month);
}
//判断闰年
static boolean isRunNian(long y){
if(y%400==0 || (y%4==0&&y%100!=0))
return true;
else
return false;
}
//判断月份,取天数
static int getDays(long y,int m){
int days=0;
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if(isRunNian(y))
days=29;
else
days=28;
break;
default:
days=0;
break;
}
return days;
}
//获取去星期天
static long getAllDays(long y,int month,int day){
long sumDays=0;
//按年取天数
for(long l=1900;l<=y;l++){
if(l<=1900){sumDays=0;}
else if(l>1900 && isRunNian(l)){
sumDays+=366;//闰年366天
}else{
sumDays+=365;//平年365天
}
}
//按月取天
for(int i=1;i<=month-1;i++){
sumDays=sumDays+getDays(y,i);
}
sumDays+=(long)day;
return sumDays;
}
///取周几
static int getWeekDay(long days){
return (int)days%7;
}
//打印月历
static void printCal(long y,int m){
for(int i=0;i<7;i++){
switch(i){
case 1:System.out.print("星期一 ");break;
case 2:System.out.print("星期二 ");break;
case 3:System.out.print("星期三 ");break;
case 4:System.out.print("星期四 ");break;
case 5:System.out.print("星期五 ");break;
case 6:System.out.print("星期六 ");break;
case 0:System.out.print("星期日 ");break;
}
//打印星期的题标
}
System.out.println();
//打印具体日期
//int[] d= new int[35];
int k=1;int j=1;
for(int i=1;i<=getDays(y,m);i++){
if(i<=getWeekDay(getAllDays(y,m,1))){
System.out.print(" ");
}else{
if(k<=9){
System.out.print(" "+k+" ");
}else{
System.out.print(" "+k+" ");
}
k++;
}
if(i%7==0){
System.out.println();
}
}
}
class Calender
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("输入年份:(格式:1900-~)");
long year=input.nextLong();
if(isRunNian(year)){System.out.println("闰年");}else{System.out.println("平年");}
System.out.println("输入月份:(格式:1-12)");
int month=input.nextInt();
System.out.println(month+"月总共有:"+getDays(year,month)+"天");
System.out.println("输入日数:(格式:1-31)");
int day=input.nextInt();
System.out.println("总天数:"+getAllDays(year,month,day));
System.out.println("星期:"+getWeekDay(getAllDays(year,month,day)));
System.out.println("本月一号是星期:"+getWeekDay(getAllDays(year,month,1)));
System.out.println();
printCal(year,month);
}
//判断闰年
static boolean isRunNian(long y){
if(y%400==0 || (y%4==0&&y%100!=0))
return true;
else
return false;
}
//判断月份,取天数
static int getDays(long y,int m){
int days=0;
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if(isRunNian(y))
days=29;
else
days=28;
break;
default:
days=0;
break;
}
return days;
}
//获取去星期天
static long getAllDays(long y,int month,int day){
long sumDays=0;
//按年取天数
for(long l=1900;l<=y;l++){
if(l<=1900){sumDays=0;}
else if(l>1900 && isRunNian(l)){
sumDays+=366;//闰年366天
}else{
sumDays+=365;//平年365天
}
}
//按月取天
for(int i=1;i<=month-1;i++){
sumDays=sumDays+getDays(y,i);
}
sumDays+=(long)day;
return sumDays;
}
///取周几
static int getWeekDay(long days){
return (int)days%7;
}
//打印月历
static void printCal(long y,int m){
for(int i=0;i<7;i++){
switch(i){
case 1:System.out.print("星期一 ");break;
case 2:System.out.print("星期二 ");break;
case 3:System.out.print("星期三 ");break;
case 4:System.out.print("星期四 ");break;
case 5:System.out.print("星期五 ");break;
case 6:System.out.print("星期六 ");break;
case 0:System.out.print("星期日 ");break;
}
//打印星期的题标
}
System.out.println();
//打印具体日期
//int[] d= new int[35];
int k=1;int j=1;
for(int i=1;i<=getDays(y,m);i++){
if(i<=getWeekDay(getAllDays(y,m,1))){
System.out.print(" ");
}else{
if(k<=9){
System.out.print(" "+k+" ");
}else{
System.out.print(" "+k+" ");
}
k++;
}
if(i%7==0){
System.out.println();
}
}
}
}
本代码是用于用户控制台按要求输入年、月、日,然后打印是:
闰年或平年,
哪一个月多少天,
从1900值输入日期为止总共
当前日是周几
本月一号是周几
以即本月的月历表