Maison >Java >javaDidacticiel >Comment utiliser la classe LocalDate pour implémenter la conception de calendrier en Java

Comment utiliser la classe LocalDate pour implémenter la conception de calendrier en Java

王林
王林avant
2023-05-19 15:34:39975parcourir

Préface

Avant de terminer la conception de ce calendrier, nous devons comprendre une certaine utilisation de la classe prédéfinie LocalDate en JavaLocalDate的一些用法

语法

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

会构造一个新对象,表示构造这个对象时的日期。

LocalDate.of(1999, 1, 1)

可以提供年、月和日来构造对应一个特定日期的对象:

当然,通常我们都希望将构造的对象保存在一个对象变量中:

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

当有了一个LocalDate对象,可以用方法getYeargetMonthValuegetDayOfMonth得到年、月和日:

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

上面的方法看起来没什么意义,因为这正是构造对象时使用的那些值。不过,有时可能有一个计算得到的日期,然后你希望调用这些方法来了解它的更多信息。例如,plusDays方法会得到一个新的LocalDate,如果把应用这个方法的对象称为当前对象,这个新日期对象则是距当前对象指定天数的一个新日期:

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

aThousandDaysLater是在原来的日期上加了1000天,这时使用上面的方法就有效了

日历实战

需求:使用LocalDate类展示当前月的日历,格式如下:

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

当前日期使用*号标记。可以看到,这个程序需要知道如何计算某月份的天数以及一个给定日期相应是星期几。

步骤分解

①先构造一个对象,并用当前的日期初始化

`LocalDate date = LocalDate.now();`

②获取当前的月份和日期

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

③将date设置为这个月的第一天,并得到这一天为星期几

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

变量weekday设置为DayOfWeek类型的对象。我们调用这个对象的getValue方法来得到星期几的一个数值。我们会得到一个整数。星期一就返回1,星期二就返回2,依次类推,星期日就返回7.

④由于日历的第一行是缩进的,这样可使月份的第一天指向相应的星期几。下面代码会打印表头和第一行的缩进

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

⑤打印日历的主体,进入一个循环,其中date遍历一个月中的每一天。

每次迭代时,打印日期值。如果date是当前日期,这个日期则用一个*

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

construira un nouvel objet, représentant la date à laquelle cet objet est construit.

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

Vous pouvez fournir l'année, le mois et le jour pour construire un objet correspondant à une date précise :

Bien sûr, nous voulons tous sauvegarder l'objet construit dans un variable objet :

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天的日期

Lorsque vous avez un objet LocalDate, vous pouvez utiliser les méthodes getYear, getMonthValue et getDayOfMonthcode>Obtenez l'année, le mois et le jour :

rrreee

La méthode ci-dessus semble n'avoir aucun sens, car ce sont les valeurs utilisées lors de la construction de l'objet. Cependant, vous pouvez parfois avoir une date calculée et souhaiter appeler ces méthodes pour en savoir plus. Par exemple, la méthode plusDays obtiendra un nouveau LocalDate. Si l'objet auquel cette méthode est appliquée est appelé l'objet actuel, ce nouvel objet date sera le numéro spécifié. de jours à partir de l'objet actuel. Nouvelle date :

rrreee#🎜🎜#aThousandDaysLater ajoute 1000 jours à la date d'origine. Dans ce cas, la méthode ci-dessus sera efficace #🎜🎜##. 🎜🎜# Pratique du calendrier #🎜🎜##🎜🎜#Exigence : Utilisez la classe LocalDate pour afficher le calendrier du mois en cours, le format est le suivant :#🎜🎜#
#🎜 🎜#Lun Mar Mer Jeu Ven Sam Dim
1* 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 2 4
25 26 27 28 29 30 31# 🎜🎜#
#🎜🎜#La date actuelle est marquée de *. Comme vous pouvez le constater, ce programme doit savoir calculer le nombre de jours dans un mois et le jour de la semaine correspondant pour une date donnée. #🎜🎜##🎜🎜#Répartition des étapes#🎜🎜##🎜🎜#①Construisez d'abord un objet et initialisez-le avec la date actuelle#🎜🎜#rrreee#🎜🎜#②Obtenez le mois et la date en cours#🎜🎜#rrreee # 🎜🎜#③Réglez la date sur le premier jour de ce mois et obtenez le jour de la semaine #🎜🎜#rrreee#🎜🎜#La variable weekday est définie sur DayOfWeekObject de type. Nous appelons la méthode getValue de cet objet pour obtenir une valeur numérique pour le jour de la semaine. Nous obtiendrons un entier. Renvoie 1 le lundi, 2 le mardi, et ainsi de suite, et renvoie 7 le dimanche #🎜🎜##🎜🎜#④ Puisque la première ligne du calendrier est en retrait, cela permet au premier jour du mois de pointer vers le. Jour de la semaine correspondant. Le code suivant imprimera l'en-tête et l'indentation de la première ligne #🎜🎜#rrreee#🎜🎜#⑤ Imprime le corps principal du calendrier et entre une boucle dans laquelle la date traverse chaque jour du mois. #🎜🎜##🎜🎜#A chaque itération, imprimez la valeur de la date. Si date est la date actuelle, la date est marquée d'un *. Ensuite, avancez la date au lendemain. S'il atteint le premier jour d'une nouvelle semaine, il s'imprime sur une nouvelle ligne : #🎜🎜#rrreee#🎜🎜# Nous ne savons pas combien de jours il y a dans le mois, que ce soit 28, 29, 30 ou 31, donc nous ne savons pas quand sera la fin. En fait, tant que la date est toujours dans le mois en cours, l'itération continuera. L'interface d'une classe effectue des tâches assez complexes sans connaître les détails d'implémentation#🎜🎜##🎜🎜#LocalDate API#🎜🎜#rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer