用java实现打印日历

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;
    }
}

运行结果
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值