求一个JAVA程序的万年历,主需要输出2013年整年的日历就行

如题所述

import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class CalendarTest {

public static void main(String[] args) {
GregorianCalendar d=new GregorianCalendar();
for(int i=0;i<=Calendar.DECEMBER;i++){
d.set(Calendar.MONTH, i);
System.out.println(d.get(Calendar.MONTH)+1+"月");
showMonth(d);
}
}

private static void showMonth(GregorianCalendar d) {
//construct d as current date
int today=d.get(Calendar.DAY_OF_MONTH);
int month=d.get(Calendar.MONTH);
//set d to start date of the month
d.set(Calendar.DAY_OF_MONTH, 1);
int weekday=d.get(Calendar.DAY_OF_WEEK);
//get first day of week(Sunday )
int firstDayOfWeek=d.getFirstDayOfWeek();
//determine the required indentation for the first line
int indenct=0;
while(weekday!=firstDayOfWeek){
indenct++;
d.add(Calendar.DAY_OF_MONTH,-1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
//print weekday name
String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
do{
System.out.printf("%4s",weekdayNames[weekday]+"\t");
d.add(Calendar.DAY_OF_WEEK,1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}while(weekday!=firstDayOfWeek);
System.out.println();
//print space
for(int i=0;i<indenct;i++){
System.out.print("\t");
}
d.set(Calendar.DAY_OF_MONTH, 1);
do{
//print day
int day=d.get(Calendar.DAY_OF_MONTH);
System.out.printf("%3d",day);
//mark current day with *
if(day==today){
System.out.print("*\t");
}else{
System.out.print("\t");
}
//advance d to the next day
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
//start a new line at the start of the week
if(weekday==firstDayOfWeek){
System.out.println();
}

}while(d.get(Calendar.MONTH)==month);
//the loop exists when d id day 1 of the next money

//print final end of line if necessary
if(weekday!=firstDayOfWeek){
System.out.println();
}
}

}

你试试我尝试过没有问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-03
我给你一个 吧 。
可以帮助你吧 , 必须的嘛 。

import java.util.*;
public class k1 {
public static void main (String[]args){
Scanner in = new Scanner(System.in);
System.out.println("请输入年份 :");
int year = in.nextInt();
System.out.println("请输入月份 :");
int month = in.nextInt();
int sum = 0;
for (int i=1900;i<year;i++){
if(i%4==0 && i%100!=0 || i%400==0){ //算 瑞年和 平年
sum+=366; //瑞年一年366天
}else{
sum+=365; //平年一年365天
}
}
for (int i = 1;i<month;i++){
if(i==2){ // 二月份的
if (year%4==0 && year%100!=0 || year%400==0){
sum+=29;
}else{
sum+=28;
}

}else if
(i==4 || i==6 || i==9 || i==11){ //4,6,9,11 月份 每月 30天
sum+=30;
}else{
sum+=31; //剩下的都是31天
}
}
sum+=1;

int pi = 0;
for (int i = 1;i<=month;i++){
if(i==2){ // 二月份的
if (year%4==0 && year%100!=0 || year%400==0){
pi=29;
}else{
pi=28;
}

}else if
(i==4 || i==6 || i==9 || i==11){ //4,6,9,11 月份 每月 30天
pi=30;
}else{
pi=31; //剩下的都是31天
}
}

int wekeday = sum %7;
System.out.println("日\t 一\t 二\t 三\t 四\t 五\t 六\t"); //打印日历前面的 星期
for(int i =1;i<=wekeday;i++){
System.out.print("\t");
}for(int i=1;i<=pi;i++){
if (sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}
}本回答被提问者采纳
相似回答