关于日期和年份的。。。
(帮人回答的一帖子,找不见发帖人了,就发源码写出来了,希望他能看见)
要求:从控制台接受任意输入的年份和月份,(1)判断该年份是否是闰年,(2)计算该月的天数,(3)计算该月第一天是星期几(4)格式化输出该月日历
package com.xinzhanedu;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class Cheakyear {
static int year = 0;// 存储输入的年份
static int month = 0;// 存储输入的月份
static boolean flag=false;// 是否是闰年的标志;默认为不是闰年
Scanner input = new Scanner (System.in);
public static void main(String[] args){
Cheakyear ck = new Cheakyear();// 创建类的对象
ck.input();// 调用方法
flag = ck.testYear(year);
if(flag){
System.out.println("您所输入的年份是闰年");
}else{
System.out.println("您所输入的年份不是闰年");
}
int totalDay = ck.testMonth(year,month);
System.out.println(year+"年的"+month+"月共有"+totalDay+"天");
String dayOfWeek = ck.getDay(year,month);
System.out.println("该月的第一天是:"+dayOfWeek);
ck.printCalendar(year,month);
}
public void input (){// 实现控制台输入数据的接受
System.out.println("请输入您所要判断的年份:");
year = input.nextInt();
System.out.println("请输入您所要判断的月份:(1——12)");
month = input.nextInt();
}
public boolean testYear(int year){// 判断是否是闰年
if(year%400==0||(year%4==0&&year%100!=0)){
return true;
}else{
return false;
}
}
public int testMonth(int year,int month){// 判断输入的月份有多少天
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
return 31;
}else if(month==4||month==6||month==9||month==11){
return 30;
}else if(flag&&month==2){// 闰年的2月有29天
return 29;
}else if(!flag&&month==2){// 闰年的2月有28天
return 28;
}else{
return 0;
}
}
public String getDay(int year,int month){// 根据月份判断该月第一天是星期几
String retVal= " ";
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.YEAR,year); //设置年份,月份,以及日期
calendar.set(Calendar.MONTH,month-1);
calendar.set(Calendar.DATE,1);
//calendar.set(year,month-1,1);//或者用此方法代替上面的三行
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
switch (dayOfWeek){
case 1:
retVal= "星期日 ";
break;
case 2:
retVal= "星期一 ";
break;
case 3:
retVal= "星期二 ";
break;
case 4:
retVal= "星期三 ";
break;
case 5:
retVal= "星期四 ";
break;
case 6:
retVal= "星期五 ";
break;
case 7:
retVal= "星期六 ";
break;
}
return retVal;
}
public long getTotalDays(int year,int month){ /*从1900年1月1日到输入年份一共多少天*/
long sum=0;
for(int i=1900;i<year;i++){ /*计算year-1900年之间的天数*/
if(testYear(i)){
sum+=366;
}
else {
sum+=365;
}
}
for(int i=1;i<=month;i++){ /*计算yaer年里,1月到month月的天数*/
sum+=testMonth(year,i);
}
return sum;
}
public void printCalendar(int year,int month){
int i;
System.out.println("**************************");
System.out.println(year+"年"+month+"月");
long sum = getTotalDays(year,month-1); /*计算 m个月的前m-1个月的天数*/
int monthDay=testMonth(year,month);
System.out.println("Sun Mon Tue Wed Thu Fri Sat \n");
for(i=1;i<=sum%7+1;i++){
if(sum%7+1==7){
break;
}
System.out.print(" "); /*8个空格*/
}
for(i=1;i<=monthDay;i++){
if((i+sum%7)%7==0){
System.out.print("\n");
}
if(i<=9){
System.out.print(i+" "); /*7个空格*/
}else{
System.out.print(i+" "); /*6个空格*/
}
}
}
}