问题1:
如何从控制台输入一个字符串,然后变成日期
Scanner scanner = new Scanner(System.in);
String temp =scanner.nextLine();
//创建一个格式器
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
//利用格式器创建一个日期
Date date = format.parse(temp);
//创建日历对象
Calendar calendar = new GregorianCalendar();
//再把日期放进日历中去
calendar.setTime(date);
问题2:
如何获取该月共有多少天?
int dayCount=calendar.getActualMaximum(calendar.DATE);
问题三:
如何知道该月的第一天是星期几,对应的数值是多少?
//把给定的天数设置为该月第一天
calendar.set(Calendar.DAY_OF_MONTH, 1);
//获取该月第一天是星期几
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK); //某月一号是星期几
问题四:
如何控制前面的空格
//System.out.println(day_of_week); 4 说明要占3格
for(int i=1;i<day_of_week;i++){
System.out.print("\t");
}
问题五:
如何进行逢周六换行
//还有最后一个问题,就是逢周六换行
int w = calendar.get(Calendar.DAY_OF_WEEK);//1号对应的星期几
if(w==Calendar.SATURDAY){
System.out.println();
}
问题六:
之前把日期设为1号,但是我们的日期要递增才行,不然w永远都是1号
//还要把该月一号加1
calendar.add(Calendar.DATE, 1);
具体代码如下:
package cn.hejiaming.test;
import java.util.Date;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
/**
* 作用:制作一个万年历,并了解年月日相关数据的获取和设置
* @author Administrator
*
*/
public class CalendarTest {
public static void main(String[] args) {
System.out.println("请输入查询的日期,格式如“2012-03-23” ");
Scanner scanner = new Scanner(System.in);
String temp =scanner.nextLine();
//String temp = "2012-12-03";
//创建一个格式器
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
//利用格式器创建一个日期
Date date = format.parse(temp);
//创建日历对象
Calendar calendar = new GregorianCalendar();
//再把日期放进日历中去
calendar.setTime(date);
//获取今天是几号
int today = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("日\t一\t二\t三\t四\t五\t六");
//先利用这些东西构建自己的思路,以免想法太多一步登天太难
// for(int i=1;i<31;i++){
// System.out.print(i+"\t");
// if(i%7==0){
// System.out.println();
// }
// }
//把给定的天数设置为该月第一天
calendar.set(Calendar.DAY_OF_MONTH, 1);
//获取该月第一天是星期几
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK); //某月一号是星期几
//System.out.println(today); 4 说明要占3格
for(int i=1;i<day_of_week;i++){
System.out.print("\t");
}
//算出该月有多少天
//System.out.println(calendar.getActualMaximum(calendar.DATE));
int dayCount=calendar.getActualMaximum(calendar.DATE);
for(int i=1;i<dayCount;i++){
//还有一个功能,在该月标注今天是几号
if(i==today){
System.out.print("*");
}
System.out.print(i+"\t");
//还有最后一个问题,就是逢周六换行
int w = calendar.get(Calendar.DAY_OF_WEEK);
if(w==Calendar.SATURDAY){
System.out.println();
}
//还要把该月一号加1
calendar.add(Calendar.DATE, 1);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
总结一下:
- 刚想这个日历的时候就觉得很麻烦,首先是字符串日期的转换问题
- 其他不会的问题都在上面提出了
- 心得:
- 没有任何头绪的要先把问题想简单,一步一步的实现
- 然后再具体化,细节化