import java.util.*;
创新互联建站是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括网站设计制作、做网站、电商网站制作开发、成都微信小程序、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!
public class Year{
/**
*判断是否为闰年
*/
public boolean getIsRun(int year){
if((year%4==0 year %100 !=0)||(year%400==0)){
return true;
}
return false;
}
/**
*返回某年某月有多少天。
*/
public int getDay(int year ,int month){
int[] day={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//闰年月份
int[] day1={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//普通月份
if(this.getIsRun(year)){
return day[month+1];
}else{
return day1[month+1];
}
}
/**
*返回这个月的1号是星期几
*/
public int getWeek(int year,int month){
Date date=new Date();
date.setYear(year);
date.setMonth(month);
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
return calendar.get(calendar.DAY_OF_WEEK);
}
/**
*打印出来,嘎嘎
*/
public void showPrint(int year,int month){
int day=this.getDay(year,month);
int week=this.getWeek(year,month);
System.out.println("日\t一\t二\t三\t四\t五\t六\n");
for(int i=0;i=week;i++){//
System.out.print (" \t");
}
for(int j=1;j=day;j++){
if((j+week)%7==0){
System.out.println ();
}
System.out.print (j+"\t");
}
// System.out.println(week);
}
public static void main(String[] args){
Year y=new Year();
y.showPrint(2008,3);
}
}
建议封装函数,使用数组完成所有的打印
比如获取天数,getDays(int year,int month)
获取星期,getDay(int allDays)
获取极度,getQuater(int month)
然后打印重载写print方法,传入的flag不同打印年 嫉妒等
水平排列有点蛋疼,不过还是想到办法搞定了,希望你运行的时候排列不会有问题。请接招:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
public class CalendarOutput {
private static Calendar cal1, cal2;
private static final String[] DAY_OF_WEEK = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
private static DateFormat df = new SimpleDateFormat("yyyy年MM月");
private static DateFormat parseDf = new SimpleDateFormat("yyyyMM");
private static Scanner sc;
public static void main(String[] args) {
cal1 = Calendar.getInstance();
cal1.set(Calendar.DATE, 1);
cal1.setFirstDayOfWeek(Calendar.SUNDAY);
cal2 = Calendar.getInstance();
cal2.set(Calendar.DATE, 1);
sc = new Scanner(System.in);
System.out.println("请输入年月(如201411):");
Date d = null;
while(null == d) {
try {
String line = sc.nextLine();
d = parseDf.parse(line);
} catch (ParseException e) {
System.out.println("日期格式不正确,请重新输入!");
d = null;
}
}
cal1.setTime(d);
cal2.set(Calendar.YEAR, cal1.get(Calendar.YEAR));
cal2.set(Calendar.MONTH, cal1.get(Calendar.MONTH));
cal2.add(Calendar.MONTH, 1);
printCal();
}
private static void printCal() {
// 先在最顶部显示年份
System.out.println(String.format("\t%s\t\t\t%s",
df.format(cal1.getTime()), df.format(cal2.getTime())));
printWeek(); // 然后输出星期日到星期一
// 先将两个月的日期保存到两个数组中
String[][] month1 = putMonth(cal1);
String[][] month2 = putMonth(cal2);
// 再将数组中的文字取出来并显示
for(int i = 0; i month1.length; i ++) {
String[] month = month1[i];
// 逐周输出日期
for(int j = 0; j month.length; j ++) {
System.out.print(month[j]);
}
// 如果第二个月周数不小于第一个月,则在本行再输出第二个月的日期
System.out.print("\t");
if(month2.length i) {
for(int j = 0; j month.length; j ++) {
System.out.print(month2[i][j]);
}
}
System.out.println();
}
// 如果第二个月周数大于第一个月,则再输出第二个月的日期(可用2月份检验)
if(month1.length month2.length) {
int deltaMonth = month2.length - month1.length;
for(int i = 0; i deltaMonth; i ++) {
for(int j = 0; j 7; j ++) {
System.out.print(" ");
}
System.out.print("\t");
for(int j = 0; j 7; j ++) {
System.out.print(month2[month1.length + i][j]);
}
}
}
}
private static String[][] putMonth(Calendar cal) {
ListListString listArray = new ArrayListListString();
int month = cal.get(Calendar.MONTH);
cal.set(Calendar.DATE, 1);
int startDayOfWeek1 = cal.get(Calendar.DAY_OF_WEEK);
ListString list = new ArrayListString();
// 先设置为本周属于上个月的几天,以空字符显示
cal.add(Calendar.DATE, -(startDayOfWeek1 - Calendar.SUNDAY) - 1);
for(int i = Calendar.SUNDAY; i startDayOfWeek1; i ++) {
list.add("\t");
}
// 重新初始化为本月第一天
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DATE, 1);
int maxDate = cal.getActualMaximum(Calendar.DATE); // 本月最多的天数(不用再去判断是否闰年了)
for(int j = 1; j = maxDate; j ++) {
list.add(String.format("%4s", j + ""));
if(list.size() == 7) {
ListString list2 = new ArrayListString(list);
listArray.add(list2); // 碰到星期六就换行
list = new ArrayListString();
} else if(j == maxDate) {
listArray.add(list); // 最后一天就将最后一周添加进来
}
}
String[][] monthDates = new String[listArray.size()][7];
for(int i = 0; i listArray.size(); i ++) {
ListString item = listArray.get(i);
for(int j = 0; j 7; j ++) {
if(item.size() j) { // 如果是最后一周的话可能存在下标越界
monthDates[i][j] = item.get(j);
} else { // 下标越界的时候设置为空字符串
monthDates[i][j] = "\t";
}
}
}
return monthDates;
}
private static void printWeek() {
for(int i = Calendar.SUNDAY; i = Calendar.SATURDAY; i ++) {
System.out.print(String.format("%4s", DAY_OF_WEEK[i - 1]));
}
System.out.print("\t");
for(int i = Calendar.SUNDAY; i = Calendar.SATURDAY; i ++) {
System.out.print(String.format("%4s", DAY_OF_WEEK[i - 1]));
}
System.out.println();
}
}