简易日历-Java实现

引言:在看《Java核心技术卷一》时看到的代码,出现在102页,内容很基础,但是是一个不错的引入类的概念和使用方法的例子,内容如下。

一、目的:

例如现在是2023年三月份,我们要实现可以直观地看出当月的所有日期以及他所对应的星期几,我们可以看到今天是21号,所以日历上有特殊标记,我们也用*来标记当前日期。

二、详细设计:

  1. 构造一个对象,使用当前的日期来初始化化他

LocalDate date = LocalDate.now();
  1. 获得当前的月份和日期

int month = date.getMonthValue();
int today = date.getDayOfMonth();
  1. 将date设置为该月份的第一天,并且得到这一天是星期几。

构造一个变量weekday,把他设置为DayofWeek类型的变量,然后调用这个对象的getValue方法来得到星期几的一个数值,例如星期一是1,星期日是7.

date  = date.minusDays(today - 1);
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();

4、一般来说,日历的第一行是有缩进的,为的是第一天与所对应的星期几对齐,我们可以用for循环,一直对照第一天是星期几,不对应就输出空格,对应上了就从他开始输出每一天的日期。

System.out.println("mon tue wed thu fri sat sun");
for(int i=1;i<value;i++) {
            System.out.print("   ");
        }

5、这一块是最重要的一部分,主要业务逻辑就是只要改日是属于这个月的,就输出他,一直遍历输出,遇到了是当前日期的日子就用*来标记他,遇到了周日,也就是一个星期的末尾我们就换行,接着输出。

 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();

6、到这里所有代码就结束了,但是不要忘记import你用到的包,该示例程序重点是向你展示如何使用一个类的接口来完成复杂的工作,而我们无需了解细节。

7、运行截图:

三、附录:

import java.time.*;
public class calendar
{
    public static void main(String [] args){
        LocalDate date = LocalDate.now();
        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.print("   ");
        }

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

}


版权声明:本文为juzihake原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。