public class Text {
private static DayOfWeek[] ENUMS = DayOfWeek.values();
private static String t = "\t";
private static int[] number = {7, 6, 5, 4, 3, 2, 1};
public static void main(String[] args) {
//传入要打印的日期 年 月 日
LocalDate localDate = LocalDate.of(2020, 3, 1);
text(localDate);
}
private static void text(LocalDate localDate) {
//起始日期
int day = 1;
LocalDate beginningDate = LocalDate.of(localDate.getYear(), localDate.getMonth(), day),
date = beginningDate,
localDateNow = LocalDate.now();
System.out.println(t + t + beginningDate.getYear() + "年" + t + beginningDate.getMonthValue() + "月\n" + "一\t二\t三\t四\t五\t六\t日");
List<String> list = new ArrayList<>(),
list1 = new ArrayList<>();
int i = 1, size = beginningDate.lengthOfMonth() + day;
//把当月的日期存入集合里
while (i < size) {
//用三目运算符判断日期是不是今天
list.add(date.equals(localDateNow) ? i + "*" : String.valueOf(i));
date = date.plusDays(day);
i++;
}
for (int j = 0, carousel = 7, num; j < list.size(); j += carousel) {
if (j == 0) {
num = number[week(beginningDate) - day];
list1.add(list.stream().limit(num).collect(Collectors.joining(t, join(beginningDate.getDayOfWeek()), "")));
j += num;
}
list1.add(list.stream().skip(j).limit(carousel).collect(Collectors.joining(t)));
}
//打印日历
list1.forEach(System.out::println);
while (true) {
if (localDate.getYear() != 2020) break;
//往后移一年
LocalDate localDate2 = localDate.plusMonths(1);
//递归
text(localDate2);
return;
}
}
/**
* 获取当天的星期几
* @param localDate
* @return
*/
private static int week(LocalDate localDate) {
int week = 0;
for (int i = 0; i < ENUMS.length; i++) {
if (ENUMS[i].equals(localDate.getDayOfWeek())) {
week = i + 1;
}
}
return week;
}
/**
* 用于显示日期
* @param week
* @return
*/
private static String join(DayOfWeek week) {
String t1 = "";
StringBuilder sb = new StringBuilder();
switch (week) {
case TUESDAY:
t1 = String.valueOf(sb.append(t));
break;
case WEDNESDAY:
t1 = String.valueOf(sb.append(t).append(t));
break;
case THURSDAY:
t1 = String.valueOf(sb.append(t).append(t).append(t));
break;
case FRIDAY:
t1 = String.valueOf(sb.append(t).append(t).append(t).append(t));
break;
case SATURDAY:
t1 = String.valueOf(sb.append(t).append(t).append(t).append(t).append(t));
break;
case SUNDAY:
t1 = String.valueOf(sb.append(t).append(t).append(t).append(t).append(t).append(t));
break;
}
return t1;
}
}
运行结果