JAVA输入一个日期,编写程序输出这个日期所在年份和月份的月历

例如输入2015-7-1
输出

求助

package shixun;
import java.io.*;
public class ShixunTest11
{
static int year,month,day;

public static long firstDayofYear(int y)
{
long n;
n = 365*y;
for(int i = 1;i < y;i++)
if(leapyear(i))
n++;
return (int)(n%7);
}

public static void DateForm(String str)
{
if(str.length() != 10)
{
System.out.println("输入格式有错!");
return ;
}

year = Integer.parseInt(str.substring(0,4));
month = Integer.parseInt(str.substring(5,7));
day = Integer.parseInt(str.substring(8,10));

if(year<0||month<=0||month>12||day<=0||day>31)
{
System.out.println("日期数据错误!");
return ;
}

if(month==4 || month==6 || month==9 || month==11)
{
if(day > 30)
{
System.out.println("日期数据错误!");
return ;
}
}

if(month == 2)
{
if(leapyear(year) && day>29)
{
System.out.println("日期数据错误!");
return ;
}
else
if(leapyear(year)==false && day>28)
{
System.out.println("日期数据错误!");
return ;
}
}
printmonth();
}

public static boolean leapyear(int y)
{
boolean isleapyear = true;
if((y%4==0 && y%100!=0) || y%400 == 0)
return isleapyear;
else
{
isleapyear = false;
return isleapyear;
}
}

public static int monthofDay(int month)
{
if(month==1||month==3||month==5||month==7
||month==8||month==10||month==12)
return 31;
if(month==4||month==6||month==9||month==11)
return 30;
if(month==2)
{
if(leapyear(year))
return 29;
else
return 28;
}
else
return 0;
}

public static void printmonth()
{
long l = firstDayofYear(year);
System.out.println(month +" 月");
System.out.println("=====================");
System.out.println("日 一 二 三 四 五 六");
for(int k = 1;k <= l;k++)
{
System.out.print(" ");
}
for(int d = 1;d <= monthofDay(month);d++)
{
if(d < 10)
System.out.print(d + " ");
else
System.out.print(d + " ");
l = (l+1) % 7;
if(l == 0)
System.out.println();
}
}
public static void main(String[] args)throws IOException
{
// TODO 自动生成的方法存根
System.out.println("输入某年某月某日(格式:xxxx/xx/xx):");
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
String s = in.readLine();
DateForm(s);//调用DateForm()方法
}
}

花了几个小时写的,望采纳,谢谢
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-29
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Test29 {
    public static void main(String[] args) throws ParseException {
        String date = "2015-7-1";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar ca = Calendar.getInstance();
        ca.setTime(sdf.parse(date));
        System.out.println("年:"+ca.get(Calendar.YEAR));
        System.out.println("月:"+ca.get(Calendar.MONTH));
    }
}

追问

不太对,要显示一个月历出来的

追答

在控制台显示月历?还是前端页面?

追问

控制台,要用到SimpleDateFormat,Calendar等相关类

本回答被网友采纳
第2个回答  2018-07-02
import java.util.*;
public class Demo
{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个大于1900年的年份:");
int year=scan.nextInt();
System.out.println("请输入月:");
int mouth=scan.nextInt();
int sumDay=0;
for(int i=1900;i<year;i++){
sumDay+=daySum(i);
}
for(int j=1;j<mouth;j++){
sumDay+=dayMonth(j);
}
if(leapYear(year)&&mouth>2){
sumDay++;
}
int week=sumDay%7;
System.out.println("\t星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
int k=0;
for(k=0;k<(week+1)%7;k++){
System.out.print("\t");
}
int s=1;
while(s<=dayMonth(mouth)){
if(k==7){
k=0;
System.out.println();
}
System.out.print("\t"+s);
k++;
s++;

}
if(leapYear(year)&&mouth==2){
System.out.print("\t"+s);
}
}
public static boolean leapYear(int year){
if(year%400==0||(year%4==0&&year%100!=0))return true;
else return false;
}

public static int daySum(int year){
if(leapYear(year)) return 366;
else return 365;
}
public static int dayMonth(int month){
int day=0;
switch(month){
case 2:
day=28;break;
case 4:
day=30;break;
case 6:
day=30;break;
case 9:
day=30;break;
case 11:
day=30;break;
default:
day=31;break;
}
return day;
}

}