利用Calendar类实现更多功能动态日历
第一篇博客写的就是动态日历,不过当时动态日历的实现用了太多for循环语句和switch语句,而且只是实现了日期显示,功能较单一,今天我用JDK中的Calendar类来更加简单地实现动态日历,输入年份、月份获得当月日历,若输入年份、月份是当前系统时间所在月份,就用“ * * ”标记系统当天日期,用“ | | ”标记周六和周日,并按照 "年 / 月 / 日 时: 分: 秒"的格式输出系统当前时间
以下我先介绍 Calendar 的用法,让同学们对Calendar类有初步的了解
Calendar类
Calendar类是java.util包中提供的一个抽象类,该类从JDK1.1开始出现,作为Date类的替代方案,Calendar类中包含了对不同国家地区日历的处理,Calendar类常见的子类为:java.util.GregorianCalendar;获取Calendar对象一般使用类中提供的静态方法:getInstance(),有关Calendar类的具体使用如下:
public class CalendarDemo {
public static void main(String[] args) {
// 获取一个Calendar实例(以当前系统时间为依据)
Calendar c = Calendar.getInstance();
// 获取日历所表示日期中的年份
System.out.println(c.get(Calendar.YEAR));
// 获取日历所表示日期中的月份
System.out.println(c.get(Calendar.MONTH) + 1);
// 获取日历所表示日期月份中的天数
System.out.println(c.get(Calendar.DAY_OF_MONTH));
// 获取小时数
System.out.println(c.get(Calendar.HOUR));
// 获取分钟数
System.out.println(c.get(Calendar.MINUTE));
// 获取秒钟数
System.out.println(c.get(Calendar.SECOND));
//设置日历中指定字段的值
c.set(Calendar.MONTH, 5);
//获取当前日历所表示的字段具备的最大值
System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));
//设置日历中的日期为月份中的第一天
c.set(Calendar.DAY_OF_MONTH, 1);
//当前月份的第一天是星期几?(周天是第一天)
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(c);
}
}
动态日历
正文开始,其中输出系统当前时间用到了Date类、DateFormat类和SimpleDateFormat类,还有需要注意的是Calendar.MONTH获得的月份会比系统月份小1,Calendar.DAY_OF_MONTH日历中月份中的第一天为周日
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
*
* @author max
*
*/
public class MyCalendar {
Calendar c = Calendar.getInstance();
Scanner sc = new Scanner(System.in);
public void show() {
int index = 0;
Date d = new Date();
System.out.println("请输入年份");
int year = sc.nextInt();
c.set(Calendar.YEAR, year);
System.out.println("请输入月份");
int month = sc.nextInt();
int thismonth = c.get(Calendar.MONTH) + 1;
int today = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.MONTH, month - 1);
c.set(Calendar.DAY_OF_MONTH, 1);
int n = c.get(Calendar.DAY_OF_WEEK);
DateFormat fmt = new SimpleDateFormat("yyyy/MM/dd/ HH:mm:ss");
System.out.println(fmt.format(d));
System.out.println("====================================================");
System.out.println("一\t" + "二\t" + "三\t" + "四\t" + "五\t" + "六\t" + "日\t");
System.out.println("====================================================");
for (int i = 0; i < n - 2; i++) {
System.out.print("\t");
index++;
}
for (int j = 1; j <= c.getActualMaximum(Calendar.DAY_OF_MONTH); j++) {
if (index % 7 == 6 || index % 7 == 5) {
if (j == today && month == thismonth) {
System.out.print("|*" + j + "*|\t");
} else {
System.out.print("|" + j + "|\t");
}
} else {
if (j == today && month == thismonth) {
System.out.print("*" + j + "*\t");
} else {
System.out.print(j + "\t");
}
}
index++;
if (index % 7 == 0) {
System.out.println();
}
}
}
public static void main(String[] args) {
new MyCalendar().show();
}
}