自从Java 1.8 开始,提供了新的日期和时间处理对象,使用起来方便很多。对于新项目,推荐使用该API,为了兼容旧项目,原有的API仍然可以继续使用。下面就简单使用新的API打印当月的日历:
package github.banana;
import java.time.DayOfWeek;
import java.time.LocalDate;
/**
* 打印当月日历
*
* @author zhgxun
*/
public class Calendar {
public static void main(String[] args) {
// 本地日期对象
LocalDate date = LocalDate.now();
// 指定一个日期对象
// LocalDate date = LocalDate.of(2017, 10, 5);
// 当前月份值
int month = date.getMonthValue();
// 当月所在的天
int today = date.getDayOfMonth();
// 重置月的天到起始位置, 减去指定的天数, 即是回复到月初第一天
date = date.minusDays(today - 1);
// 当前时间对应的周
DayOfWeek weekday = date.getDayOfWeek();
// 对应周的枚举
int value = weekday.getValue();
// 打印日历标题
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
// 在第一天的空白处打印空白
for (int i = 1; i < value; i++) {
System.out.printf("%4s", " ");
}
// 遍历当月
while (date.getMonthValue() == month) {
System.out.printf("%3d", date.getDayOfMonth());
// 当天着重标注
if (date.getDayOfMonth() == today) {
System.out.print("*");
} else {
System.out.print(" ");
}
// 每一次循环递增一天
date = date.plusDays(1);
// 如果是每周的第一天则换行
if (date.getDayOfWeek().getValue() == 1) {
System.out.println();
}
}
// 如果不是每周的第一天无需处理
if (date.getDayOfWeek().getValue() != 1) {
System.out.println();
}
}
}
当月日历:
Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21*
22 23 24 25 26 27 28
29 30 31
Process finished with exit code 0