Home  >  Article  >  Java  >  How to use the LocalDate class to implement calendar design in Java

How to use the LocalDate class to implement calendar design in Java

王林
王林forward
2023-05-19 15:34:39945browse

Preface

Before we complete this calendar design, we need to understand some usage of the predefined class LocalDate in Java

Syntax

LocalDate.now() // 2022-07-01

A new object will be constructed representing the date when this object was constructed.

LocalDate.of(1999, 1, 1)

You can provide the year, month and day to construct an object corresponding to a specific date:

Of course, usually we want to save the constructed object in an object variable:

LocalDate newYearsEve = LocalDate.of(1999, 1, 1);

When you have a LocalDate object, you can use the methods getYear, getMonthValue and getDayOfMonth to get the year, month and day:

int year = newYearsEve.getYear(); // 1999
int month = newYearsEve.getMonthValue(); // 1
int day = newYeaersEve.getDayOfMonth(); // 1

The above method seems to make no sense, because these are the values ​​used when constructing the object. However, sometimes you may have a calculated date and you want to call these methods to learn more about it. For example, the plusDays method will get a new LocalDate. If the object to which this method is applied is called the current object, the new date object will be a new date specified the number of days from the current object. :

LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
year = aThousandDaysLater.getYear();  // 2002
month = aThousandDaysLater.getMonthValue();  // 09
day = aThousandDaysLater.getDayOfMonth();  // 26

aThousandDaysLater is to add 1000 days to the original date, then the above method will be effective

Calendar actual combat

Requirements: Use the LocalDate class to display the calendar of the current month. The format is as follows:

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

Use *## for the current date # mark. As you can see, this program needs to know how to calculate the number of days in a month and the corresponding day of the week for a given date.

Step breakdown

①Construct an object first and initialize it with the current date

`LocalDate date = LocalDate.now();`

②Get the current month and date

int month = date.getMonthValue();
int today = date.getDayOfMonth();

③Set the date For the first day of this month, and get the day of the week for this day

date = date.minusDays(today - 1);  // 设置为当月的第一天
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();  // 1 = Monday    7 = Sunday

The variable

weekday is set to an object of type DayOfWeek. We call the getValue method of this object to get a numerical value for the day of the week. We'll get an integer. Returns 1 on Monday, 2 on Tuesday, and so on, and returns 7 on Sunday.

④ Since the first line of the calendar is indented, this allows the first day of the month to point to the corresponding day of the week. . The following code will print the header and the indentation of the first line

System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < value; i++)
    System.out.print("    ");

⑤ Print the main body of the calendar and enter a loop in which date traverses each day of the month.

On each iteration, print the date value. If date is the current date, the date is marked with a

*. Next, advance the date to the next day. If the first day of a new week is reached, a newline prints:

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

We are not sure how many days there are in this month, whether it is 28, 29, 30 or 31, so we don't know when the end is. In fact, iteration will continue as long as the date is still in the current month

Complete code

import java.time.DayOfWeek;
import java.time.LocalDate;

/**
 * @author JKC
 * @Description:
 * @date 2022/7/1 10:53
 */
public class 制作日历 {
    public static void main(String[] args) {
        // 创建一个日期对象,并进行初始化
        LocalDate date = LocalDate.now();
        System.out.println(date);
        // 获取当前月份和日期
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();

        // 将date设置为这个月的第一天,并得到这一天为星期几
        date = date.minusDays(today - 1);
        // 设置为DayOfWeek类型的对象。调用这个对象的getValue方法来得到星期几的一个数值
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();  // 1 = Monday    7 = Sunday

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

Conclusion

The focus of the above example program is to show how to use the interface of a class to complete quite Complex tasks without knowing implementation details

LocalDate API

static LocalDate now()
 //构造一个表示当前日期的对象

static LocalDate of(int year, int month, int day)
//构造一个表示给定日期的对象

int getYear()
int getMonthValue()
int getDayOfMonth()
//得到当前日期的年、月和日。

DayOfWeek getDayOfWeek
//得到当前日期是星期几,作为DayOfWeek类的一个实例返回。调用getValue来得到1~7之间的一个数,表示这是星期几,1表示星期一,7表示星期日

LocalDate plusDays(int n)
LocalDate minusDays(int n)
//生成当前日期之后或之前n天的日期

The above is the detailed content of How to use the LocalDate class to implement calendar design in Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete