编写一个日历(给定年月,输出如下形式)
package com.lan.exercise20170604;
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
// TODO Auto-generated method stub
int year,month,day;
int firstyear=1990;
int firstmonth=1;
int firstday=1;
int daylocation=0;
int sumDay=0;
Scanner reader=new Scanner(System.in);
//读入年月日:
System.out.println("请输入年 月 日:");
year=reader.nextInt();
month=reader.nextInt();
//求相差月
day=reader.nextInt();
sumDay=TheDaysbeforeThisYear(year);//求今年不包括今年到1990-1-1一共有多少天
// System.out.println("sumDay="+sumDay);
//再加上今年的天数
sumDay+=TheDaysbeforeThisMonth(year,month,day);
//求出当日在今年的第几天
// int sumDay2=TheDaysbeforeThisMonth(year,month,day);
// System.out.println("sumDay2="+sumDay2);
//求出当月天数
int daysofthismonth=TheDaysOfThisMonth(year,month);
// System.out.println("daysofthismonth="+daysofthismonth);
// System.out.println("这一年之前到1990-1-1到"+sumDay+"天");
//计算本月1号距离1990-1-1多少天
int firstdayofthismonth=sumDay-day+1;//计算本月的第一天
//输出当天的星期:
// System.out.println("今天星期"+sumDay%7);
//输出当天所在月份的1号的星期
// System.out.println(month+"月"+"是星期"+firstdayofthismonth%7);
int nulllocation=firstdayofthismonth%7-1;//日历前面的空值
int[][] calendar=new int[6][7]; //存储日期
int day2=0;
int j=0;
int k=nulllocation;
for(int i=firstdayofthismonth;i<firstdayofthismonth+daysofthismonth;i++)
{
day2=(i-firstdayofthismonth+1);
// System.out.println(day2+"日是星期"+i%7);
calendar[j][k]=day2;//存储日期位置
k++;
if(i%7==0)
{
j++;
k=0;
}
}
System.out.println("\t\t "+year+"年"+month+"月"+day+"日"+"\t是星期"+getweek((sumDay-1)%7));
//输出星期
for(int n=0;n<=calendar.length;n++)
{
switch(n)
{
case 0:
System.out.print("一"+"\t");
break;
case 1:
System.out.print("二"+"\t");
break;
case 2:
System.out.print("三"+"\t");
break;
case 3:
System.out.print("四"+"\t");
break;
case 4:
System.out.print("五"+"\t");
break;
case 5:
System.out.print("六"+"\t");
break;
case 6:
System.out.print("日"+"\t");
break;
}
}
System.out.println();//换行
//输出日期
for(int i=0;i<calendar.length;i++)
{
for(int m=0;m<calendar[i].length;m++)
{
if(calendar[i][m]==0)
{
System.out.print(" "+"\t");
}
else
System.out.print(calendar[i][m]+"\t");
}
System.out.println();
}
/*daylocation=TheDaysbeforeThisMonth(year,month,day);
System.out.println(" "+year+"年"+month+"月"+day+"日");
//System.out.println("这是这一年的第"+daylocation+"天");
*
*
*/
}
static String getweek(int n)//返回今天的星期
{
String str=null;
switch(n)
{
case 0:
str="一";
case 1:
str="二";
break;
case 2:
str="三";
break;
case 3:
str="四";
break;
case 4:
str="五";
break;
case 5:
str="六";
break;
case 6:
str="日";
break;
}
return str;
}
static int TheDaysbeforeThisYear(int year1)
{
//求今年不包括今年到前面的那些年一共有多少天
int sumDay1=0;
for(int i=1990;i<=year1-1;i++)//判断其中有多少闰年->从而知道距离1990-1-1有多少天
{
sumDay1+=365;
if(isLeapYear(i))//如果是闰年多加一天
{
// System.out.print("这之间的闰年为"+i);
// System.out.print(isLeapYear(i)+"\n");
sumDay1++;
}
}
return sumDay1;
}
//函数
//判断是不是闰年
static boolean isLeapYear(int year1)
{
return((year1%4==0&&year1%100!=100)||year1%400==0);
}
static int TheDaysOfFebruary(boolean isleapyear)
{
if(isleapyear)//是闰年返回29
return 29;
return 28;//不是闰年返回28
}
//求当月日期
static int TheDaysOfThisMonth(int year1,int month1)
{
int daysOfThisMonth=0;
switch(month1)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
daysOfThisMonth=31;
break;
case 2:
daysOfThisMonth=TheDaysOfFebruary(isLeapYear(year1));
break;
case 4:
case 6:
case 9:
case 11:
daysOfThisMonth=30;
break;
}
return daysOfThisMonth;
}
//当日在今年第几天
static int TheDaysbeforeThisMonth(int year1,int month1,int day1)
{
int b=0;
int a=TheDaysOfThisMonth(year1,month1);
for(int i=1;i<month1;i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
// case 12://
a=31;
break;
case 2:
a=TheDaysOfFebruary(isLeapYear(year1));
break;
case 4:
case 6:
case 9:
case 11:
a=30;
break;
}
b=b+a;
// System.out.println(b);
}
b=b+day1;
return b;
}
}
java打印日历
最新推荐文章于 2023-07-24 23:44:01 发布