下面在我编写简易日历的时候遇到的问题以及源码。
首先上图:
源码
。
MyCalender 类
package org.zw.jopo;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class MyCalender {
public static Date d;
public static void main(String[] args) {
System.out.println("请输入日期:(年月日,格式:2008-8-8):");
Scanner s = new Scanner(System.in);
String str = s.next();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
//把输入的字符串变为时间。
d = df.parse(str);
// System.out.print(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("请按正确格式输入");
}
MyWeek m = new MyWeek();
m.myWeek();
}
}
MyWeek类
package org.zw.jopo;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyWeek {
private Calendar gc = new GregorianCalendar();
public final static String[] week = {"日","一","二","三","四","五","六"};
/**
* 按星期输出月数
*/
public void myWeek(){
//以列表的形式输出星期日到星期一
for (int i = 0; i <= 6 ; i++) {
System.out.print(week[i] + "\t");
}
//获取输入的日期是几月;
gc.setTime(MyCalender.d);
int nowMonth = gc.get(Calendar.MONTH) + 1;
int nowDayOfMonth = gc.get(Calendar.DAY_OF_MONTH) - 1;
//设置每月第一天
gc.set(Calendar.DAY_OF_MONTH, 1);
//这一句必须在 gc.set(Calendar.DAY_OF_MONTH, 1);下面
//星期几
int nowDayOfWeek = gc.get(Calendar.DAY_OF_WEEK) - 1;
//获取当月有多少天
int maxDayOfMonth = gc.getActualMaximum(Calendar.DATE);
System.out.println();
for (int j = 0; j < nowDayOfWeek; j++) {
System.out.print("\t");
}
for (int i = 1; i <= maxDayOfMonth; i++) {
// nowDayOfWeek++;
System.out.print(i + "\t");
//必须重新获取
int w = gc.get(Calendar.DAY_OF_WEEK);
// if(nowDayOfWeek % 7 == 0){
if(w == Calendar.SATURDAY){
System.out.println();
}
gc.add(Calendar.DATE, 1);
//显示当前日期
if(nowDayOfMonth == i){
System.out.print("*");
}
}
}
}
主要问题
1.判断月时发现Date类里面的getMonth()已被废弃。
解决:
使用GregorianCalendar类中的setTime(Date date); 方法,将从控制台读取到String值转化为Date 时间值传给GregorianCalendar的对象。然后通过GregorianCalendar的对象调用get(); 方法从而获取输入时间的月,天等信息。
2.不能把日期按星期几并且在第几行第几列有规律显示出来。
解决:使用GregorianCalendar.set(Calendar.DAY_OF_MONTH, 1); 把每月的第一天显示出来,然后判断第一天是星期几,最后判断换行。