这是我写的一个日历代码
public class VisualCalendar {
public static void main(String[] args){
String str = "2017-4-8";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(d);
c.set(Calendar.DATE, 1);//将日期设为当月一号
c.get(Calendar.DAY_OF_WEEK);//这一天是一周中的第几天,这个方法的第一次调用
int maxDay=c.getActualMaximum(Calendar.DATE);//确定当月最大天数
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<c.get(Calendar.DAY_OF_WEEK);i++){
System.out.print("\t");
}
for(int i=1;i<=maxDay;i++){
System.out.print(i+"\t");
int w=c.get(Calendar.DAY_OF_WEEK);//这里调用一个方法得到的值好像必须要用一个变量保存,不然不对
if(w==Calendar.SATURDAY){
System.out.println();
}
c.add(Calendar.DATE, 1);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后我发现了个问题,就是 int w=c.get(Calendar.DAY_OF_WEEK)这段代码;如果不用w保存这个方法的调用,在下文中直接用if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY)结果就不对,但是如果提前在第一次调用这个方法时就用w将这个方法调用的结果保存的话,结果又变得很奇怪
这到底是什么情况啊,真的理解不能。。。。
第二段:
```public class VisualCalendar {
public static void main(String[] args){
String str = "2017-4-8";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(d);
c.set(Calendar.DATE, 1);//将日期设为当月一号
int w=c.get(Calendar.DAY_OF_WEEK);//这一天是一周中的第几天
int maxDay=c.getActualMaximum(Calendar.DATE);//确定当月最大天数
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<w;i++){
System.out.print("\t");
}
for(int i=1;i<=maxDay;i++){
System.out.print(i+"\t");
//这里调用一个方法得到的值好像必须要用一个变量保存,不然不对
if(w==Calendar.SATURDAY){
System.out.println();
}
c.add(Calendar.DATE, 1);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
没有毛病啊,int基本类型可以这样对比啊
package test;
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 Test {
public static void main(String[] args) {
String str = "2017-4-8";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(d);//获取当天的时间
c.set(Calendar.DATE, 1);// 将日期初始化为当月的一号
int maxDay = c.getActualMaximum(Calendar.DATE);// 确定当月最大天数
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i < c.get(Calendar.DAY_OF_WEEK); i++) {
System.out.print("\t");
}
//这里开始c的时间为2017年4月1日。
for (int i = 1; i <= maxDay; i++) {
System.out.print(i + "\t");
// 这里调用一个方法得到的值好像必须要用一个变量保存,不然不对
//4月1日的DAY_OF_WEEK位置在7号位置,打印换行符
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
c.add(Calendar.DATE, 1);//关键代码当前时间增加一天。即此时c的时间变成了4月2日。
//之后在已经换行的第一个位置打印2,
//并且4月2日的DAY_OF_WEEK位置在1号位置,并不等于7号位,所以不用换行
//放在外面已经确定的w=7,那当然是一值换行了。
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}