import java.util.Calendar
import java.util.Scanner
public class Test {
static public void main(String 参数[]){
Calendar c = Calendar.getInstance()
Scanner sc = new Scanner(System.in)
System.out.println("请输入年份:")
int year= sc.nextInt()
c.set(Calendar.YEAR, year)
c.set(Calendar.MONTH, Calendar.JANUARY)
c.set(Calendar.DAY_OF_MONTH, 1)
while(c.get(Calendar.YEAR)==year){
int wday=c.get(Calendar.DAY_OF_WEEK)
int mday=c.get(Calendar.DAY_OF_MONTH)
if(mday==1){
System.out.println("\n日\t一\t二\t三\t四\t五\t六\t第"+(c.get(Calendar.MONTH)+1)+"月")
System.out.println("---------------------------------------------------")
for(int i=0i<wday-1i++) System.out.print(" \t")
}
System.out.print(mday+"\t")
if(wday==7) System.out.println()
c.add(Calendar.DAY_OF_YEAR, 1)
}
}
}
=======
请输入年份:
2012
日 一 二 三 四 五 六 第1月
---------------------------------------------------
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
日 一 二 三 四 五 六 第2月
---------------------------------------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29
日 一 二 三 四 五 六 第3月
---------------------------------------------------
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
日 一 二 三 四 五 六 第4月
---------------------------------------------------
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
日 一 二 三 四 五 六 第5月
---------------------------------------------------
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
日 一 二 三 四 五 六 第6月
---------------------------------------------------
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
日 一 二 三 四 五 六 第7月
---------------------------------------------------
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
日 一 二 三 四 五 六 第8月
---------------------------------------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
日 一 二 三 四 五 六 第9月
---------------------------------------------------
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
日 一 二 三 四 五 六 第10月
---------------------------------------------------
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
日 一 二 三 四 五 六 第11月
---------------------------------------------------
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
日 一 二 三 四 五 六 第12月
---------------------------------------------------
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
建议封装函数,使用数组完成所有的打印比如获取天数,getDays(int year,int month)
获取星期,getDay(int allDays)
获取极度,getQuater(int month)
然后打印重载写print方法,传入的flag不同打印年 嫉妒等
水平排列有点蛋疼,不过还是想到办法搞定了,希望你运行的时候排列不会有问题。请接招:
import java.text.DateFormatimport 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) {
List<List<String>> listArray = new ArrayList<List<String>>()
int month = cal.get(Calendar.MONTH)
cal.set(Calendar.DATE, 1)
int startDayOfWeek1 = cal.get(Calendar.DAY_OF_WEEK)
List<String> list = new ArrayList<String>()
// 先设置为本周属于上个月的几天,以空字符显示
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) {
List<String> list2 = new ArrayList<String>(list)
listArray.add(list2) // 碰到星期六就换行
list = new ArrayList<String>()
} else if(j == maxDate) {
listArray.add(list) // 最后一天就将最后一周添加进来
}
}
String[][] monthDates = new String[listArray.size()][7]
for(int i = 0 i < listArray.size() i ++) {
List<String> 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()
}
}