/*
* 打印万年历:1.判断当前月有多少天;2.判断第一天星期几;
*/
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.swing.JOptionPane;
public class TestCalendar03 {
public void test2() throws IOException, ParseException {
// 从控制台获取数据
// System.out.println("请输入时间:");
String strDate = JOptionPane.showInputDialog(null, "请输入时间(格式:yyyy-mm):",
"指定时间的日历",JOptionPane.INFORMATION_MESSAGE);
// 定义字符转日期的转换器
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
// 定义日期
Date date = sdf.parse(strDate);
// 获取关于指定日期的相关信息
Calendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println(strDate);
// DAY_OF_MONTH是获得当前时间点所在月的第几号
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
// 获取当月的最大天数
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
// 获取当星期的第几天
int week = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("dayofmonth:" + dayOfMonth + "\n" + "maxday:"
+ maxDay + "\n" + "dayofweek:" + week);
String[] s = { "日", "一", "二", "三", "四", "五", "六" };
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + "\t");
}
// 定义一个集合 存放 占位符和天数
List<String> temp = new ArrayList<String>();
for (int i = 1; i < week; i++) { // 添加占位空格
temp.add(" ");
}
for (int i = 1; i <= maxDay; i++) { // 添加天数
// temp.add(String.valueOf(i)); //第一种转字符串方法
temp.add(i + " "); // 第二种,加个字符串,自动转
}
// 打印日期
for (int i = 0; i < temp.size(); i++) {
if (i % 7 == 0) {
System.out.println();
}
System.out.print(temp.get(i) + "\t");
}
}
public static void main(String[] args) throws IOException, ParseException {
TestCalendar03 tc = new TestCalendar03();
tc.test2();
}
}
//第二种方法
public void getCalender(){
try {
System.out.println("请输入时间:(yyyy-mm)");
String strDate = new BufferedReader(new InputStreamReader(System.in)).readLine();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
//定义日期
Date date = sdf.parse(strDate);
//获取关于指定日期的相关信息
Calendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 0; i < cal.get(Calendar.DAY_OF_WEEK)-1; i++) {
System.out.print("\t");
}
for (int i = 1; i <= cal.getActualMaximum(Calendar.DAY_OF_MONTH); i++) {
cal.set(Calendar.DATE, i);
if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
System.out.println(i+"\t");
}else
System.out.print(i+"\t");
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}