ホームページ > Java > &#&チュートリアル > LocalDate クラスを使用して Java でカレンダーのデザインを実装する方法

LocalDate クラスを使用して Java でカレンダーのデザインを実装する方法

王林
リリース: 2023-05-19 15:34:39
転載
1009 人が閲覧しました

はじめに

このカレンダーの設計を完了する前に、JavaSyntax

LocalDate.now() // 2022-07-01
ログイン後にコピー

の事前定義クラス

LocalDate

の使用法を理解する必要があります。このオブジェクトが構築された日付を表す新しいオブジェクトが構築されます。

LocalDate.of(1999, 1, 1)
ログイン後にコピー

年、月、日を指定して、特定の日付に対応するオブジェクトを構築できます:

もちろん、通常は構築されたオブジェクトをオブジェクト変数に保存します:

LocalDate newYearsEve = LocalDate.of(1999, 1, 1);
ログイン後にコピー

LocalDate オブジェクトがある場合、メソッド get YeargetMonthValue、および getDayOfMonth を使用して年を取得できます。 、月と日:

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 火 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

現在の日付 # マークには を使用します。ご覧のとおり、このプログラムは、1 か月の日数と、指定された日付に対応する曜日を計算する方法を知っている必要があります。

ステップの内訳

①最初にオブジェクトを構築し、現在の日付で初期化します

`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();  // 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 が現在の日付の場合、日付には #* のマークが付けられます。次に日付を翌日に進めます。新しい週の最初の日に達すると、改行が出力されます:

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();
}
ログイン後にコピー

今月が何日あるか、28、29、30、31 のいずれであるかがわかりません。終わりがいつなのかはわかりません。実際、日付が当月内である限り、反復は継続します。

完全なコード

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();
    }
}
ログイン後にコピー

結論

上記のサンプル プログラムの焦点は、その方法を示すことです。実装の詳細を知らなくても、クラスのインターフェイスを使用して非常に複雑なタスクを完了するには

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天的日期
ログイン後にコピー

以上がLocalDate クラスを使用して Java でカレンダーのデザインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート