Java中将记录时间的类与表示日期的类分开,分别为表示时间点信息的Date类;表示人们所熟悉的公历表示法的GregorianCalendar类
创建GregorianCalendar对象:
new GregorianCalendar();
new GregorianCalendar(1999, 11, 31);
new GregorianCalendar(1999,Calendar.DECEMBER,31);
new GregorianCalendar(2007,Calendar.DECEMBER,31,23,59,59)
常用的方法如:
int get(Calendar.MONTH); //由于JDK中月份范围是[0,11],也就是说月份从0开始,而其他却是从1开始的。故月份需加1
int get(Calendar.DAY_OF_WEEK); //一周中的第几天,对于Calendar.DAY_OF_WEEK 有时候需要减一,详解见博客。
void set(int field, int value); //设置对应的时间
Date getTime() //返回当前对象所描述的时间点
void setTime(Date date)
int getFirstDayOfWeek(); //获取一周的第一天是星期几,地区不一样,结果可能不一样。
简单小日历:
package lxk;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CurrentMouth {
public static void main(String[] args) {
GregorianCalendar calendar = new GregorianCalendar();
int today = calendar.get(Calendar.DAY_OF_MONTH); //获得当月第几天
// System.out.println(today);
int month = calendar.get(Calendar.MONTH); //获得当前月份
System.out.println("当前为" + (month + 1) + "月份");
calendar.set(Calendar.DAY_OF_MONTH, 1); //设置月份开始日期为1号
int weekday = calendar.get(Calendar.DAY_OF_WEEK); //获得当前为星期几,若周日为一周的第一天,返回的值需减一
// System.out.println("当前星期" + weekday);
int firstDayOfWeek = calendar.getFirstDayOfWeek(); //获得一周的第一天是星期几(有的地区是周日,有的地区是周一,周日则返回1,周一则返回2,……)
// System.out.println(firstDayOfWeek);
int indent = 0; //记录日历第一行前面有几个空
while(weekday != firstDayOfWeek){ //寻找有几个空
indent++;
calendar.add(Calendar.DAY_OF_MONTH, -1);//日期前推一天
weekday = calendar.get(Calendar.DAY_OF_WEEK); //获得前推一天是星期几
// System.out.println("星期" + weekday);
}
String[] weekdayNames = new DateFormatSymbols().getShortWeekdays(); //获取星期的名字
//打印第一行的星期名
do{
System.out.printf("%4s",weekdayNames[weekday]);
calendar.add(Calendar.DAY_OF_MONTH, 1);
weekday = calendar.get(Calendar.DAY_OF_WEEK);
}
while(weekday != firstDayOfWeek);
System.out.println();
//打印第一行空格
for(int i=1; i <= indent; i++){
System.out.print(" ");
}
calendar.set(Calendar.DAY_OF_MONTH, 1); //设置月份开始为1号
do{
int day = calendar.get(Calendar.DAY_OF_MONTH); //获得已打印到几号,用于判断是否为当天
System.out.printf("%3d", day);
if(day == today)
System.out.print("* "); //当天带有*标记
else
System.out.print(" ");
calendar.add(Calendar.DAY_OF_MONTH, 1); //日期加1
weekday = calendar.get(Calendar.DAY_OF_WEEK); //星期+1
if(firstDayOfWeek == weekday)
System.out.println(); //换行
}
while(calendar.get(Calendar.MONTH) == month); //如果是当前月就继续循环
if (firstDayOfWeek != weekday)
System.out.println();
}
}
运行结果: