效果如下:
Java代码如下:
package com.examples.date;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
public class MyCalendar {
//我要写一个日历程序
public static void main(String[] args) {
LocalDate date=LocalDate.now();//构造了一个日历对象,并用当前的日期和时间进行初始化 2018-10-03
//下面获取当前的月和日
int month=date.getMonthValue();//10
int today=date.getDayOfMonth();//3
//然后将date设置为这个月的第一天,并得到这一天为星期几
date=date.minusDays(today-1);//minus:减号 (Java SE 8新增)
//minusDays(num):在date的天数上减去num
//也就是 2018-10-3 减去 2天 即可得到这个月的第一天
DayOfWeek weekday=date.getDayOfWeek();//Wed
int value=weekday.getValue();//1=MONDAY,...7=SUNDAY
//注意日历的第一行是缩进的,使得月份的第一天指向相应的星期几。
Month month2 = date.getMonth();
System.out.println("\t"+month2 );//打印本月份:OCTOBER
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
//下面的代码会打印表头的第一行的缩进:
for(int i=0;i<value;i++) {
System.out.println(" ");
}
//打印日历的主体。进入一个循环,其中date遍历一个月中的每一天
//每次迭代时,打印日期值。如果date是当前日期,这个日期则用一个*标记。
//接下来,把date推进到下一天。如果到达新的一周的第一天,则换行打印:
while(date.getMonthValue()==month) {//打印本月的日历
//"%"表示进行格式化输出,"%"之后的内容为格式的定义,"d"表示输出十进制整数,"3"表示输出的长度
//为什么是3而不是2? 为了和Mon Tue Wed Thu Fri Sat Sun对齐
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();
}
}
}