Java 日历类 Calendar
- java.util.Calendar
了解到1.8的新特性有一个新时间日期的API,考虑哪天改良一下这个旧玩意
Calendar类
先来讲讲这个类,Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能,也是说,常用来对于日期某个属性的相加或者相减,而不是用字符串拼接的方法。
- 获取Calendar实例的方法
由于Calendar是抽象基类,所以不能用new的方式实现,只能用它的getInstance()方法。 - 一个Calendar的实例是系统时间的抽象表示,通过==get(int field)==方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND,字段含义都基本可以见文知意。
1. public void set(int field,int value)
2. public void add(int field,int amount)
3. public final Date getTime()
4. public final void setTime(Date date)
public static void main(String[] args) throws ParseException, InterruptedException {
year(new Date());
}
// 传入当前时间和月份
/**
*
* @param a
* 传入的时间
* @param i
* 传入月份方法当前传出的月份
* @return 用于循环打印当月天数
* @throws InterruptedException
*/
public static void day(Date a, int i) throws InterruptedException {
// c用来保存设置月份和天数
// c1用来判断当前月和累加天数后的月是否相等,如不相等则退出打印天数的循环
// c2用来保存现在的时间和天数
Calendar c = Calendar.getInstance();
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c2.setTime(a);
c1.set(Calendar.MONTH, i - 1);
c.set(Calendar.MONTH, i - 1);
c.set(Calendar.DATE, 1);
// 获取当月第一号是这个星期的第几天
// 是第几天就空几个\t
int speak = c.get(Calendar.DAY_OF_WEEK);
if (speak == 1) {
speak = 6;
} else {
speak -= 2;
}
// 调用空格方法
speak(speak);
// 循环打印天数
for (int j = 1; j < 35; j++) {
// 判断日期是否是10以下数字,如果是,则补零
String month = j + "";
month = month.length() >= 2 ? month + "" : "0" + month;
// 如果遍历到了今日,则用红色标出打印
if (c.get(Calendar.MONTH) == c1.get(Calendar.MONTH) && c.getTime().getMonth() == c2.getTime().getMonth()
&& c.getTime().getDate() == c2.getTime().getDate()) {
System.err.print(month + "\t");
// 增加天数
c.add(Calendar.DAY_OF_MONTH, 1);
// 睡眠5毫秒为了防止时间毫秒错乱
Thread.sleep(5);
// 如果没有遍历到今日,则用黑色打印
} else if (c.get(Calendar.MONTH) == c1.get(Calendar.MONTH)) {
// 睡眠5毫秒为了防止时间毫秒错乱
Thread.sleep(5);
System.out.print(month + "\t");
// 增加天数
c.add(Calendar.DAY_OF_MONTH, 1);
}
// 当遍历到周日时,则空行
if (c.get(Calendar.DAY_OF_WEEK) - 1 == 1) {
Thread.sleep(5);
System.out.println();
}
// 当不属于当前月时,退出循环
if (c.get(Calendar.MONTH) != c1.get(Calendar.MONTH)) {
break;
}
}
}
// 打印月份 传入当前时间
/**
*
* @param a
* 这是传入的时间
* @return 这个方法用于循环打印月份并调用打印天数
*/
public static void year(Date a) throws ParseException, InterruptedException {
for (int i = 1; i <= 12; i++) {
// 用于设置时间
Calendar c = Calendar.getInstance();
c.setTime(a);
// 设置为今年
String ing = c.get(Calendar.YEAR) + "年";
// 打印当前月
String month = (i) + "月";
// 如果当前月小于10,则补零
month = month.length() > 2 ? month + "" : "0" + month;
// 打印月份与星期
System.out.println("\t\t" + ing + month);
System.out.println("周一\t周二\t周三\t周四\t周五\t周六\t周日");
// 设置当前月
c.set(Calendar.MONTH, i);
// 传入打印天数方法
day(a, i);
System.out.println();
// 格式
if (i != 12) {
System.out.println("--------------------------------------------------------");
}
}
}
// 空行方法
/**
* @param a
* 这是当月第一号是这个星期的第几天
* @return 返回几个\t
*/
public static void speak(int a) {
for (int i = 1; i <= a; i++) {
System.out.print("\t");
}
}
最终展示效果如下图,日期格式都是标准的日历格式来进行展示