一个小程序,欢迎大家批评指导
这是一个用Date和DateFormat等常用类编写的可视化日历,刚学的常用类,一些不足之处还望高手指点。下面附上代码。
package com.HW7_31;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* 2.打印某个月份的可视化日历
*
* @author fxz
*
* 思路: 输入月份与年份,日期默认为1号,以此求得当前日期是星期几,
*/
public class HW6_2 {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.println("请按照当前格式输入年份与月份:2012-1");
String d = sc.next();
//把输入的年月添加上“1号”,以便days方法进行格式化
String date = d + "-1";
//分割年月字符串,获得年和月,使用数组ar[1]存放并转成整型赋给year(年)和mm(月)
String[] ar = d.split("-");
int mm = Integer.parseInt(ar[1]);
int year = Integer.parseInt(ar[0]);
// 数组存放三种月份天数
int arr[] = { 0, 30, 31 };
// 判断二月的天数,即arr[0]
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
arr[0] = 29;
} else
arr[0] = 28;
// 将days方法返回的第一天周日改为第一天周一
int num = days(date) - 1;
// 判断当月一号是不是第一天,是就不再减一
if (num == 0) {
num = 1;
}
// 制表输出星期
System.out.print("星期一 \t" + "星期二 \t" + "星期三 \t" + "星期四 \t" + "星期五 \t" + "星期六 \t" + "星期天 \t\n\n");
// 判断哪个月份,每个月份对应相应天数
if (mm == 4 || mm == 6 || mm == 9 || mm == 11) {
//调用打印方法打印
print(arr[1], num);
} else if (mm == 2) {
print(arr[0], num);
} else {
print(arr[2], num);
}
}
// 此方法负责打印日历
public static void print(int s, int num) {
for (int i = 1; i <= s + num - 1; i++) {
//前num个需要打空格,直接用制表符
if (i <= num - 1) {
System.out.print("\t");
} else {
//输出i,需要减去前边的空格数,前边+两个空格美化
System.out.print(" " + (i - num + 1) + "\t");
}
if (i % 7 == 0) {
System.out.println();
}
}
}
// 此方法根据传进来的从控制台输入的年月判断这周第几天并返回(周日第一天)
public static int days(String date) throws ParseException {
SimpleDateFormat si = new SimpleDateFormat("yyyy-MM-dd");
Date da = si.parse(date);
Calendar ca = Calendar.getInstance();
ca.setTime(da);
return ca.get(Calendar.DAY_OF_WEEK);
}
}