このカレンダーの設計を完了する前に、JavaSyntax
LocalDate.now() // 2022-07-01
の使用法を理解する必要があります。このオブジェクトが構築された日付を表す新しいオブジェクトが構築されます。
LocalDate.of(1999, 1, 1)
年、月、日を指定して、特定の日付に対応するオブジェクトを構築できます:
もちろん、通常は構築されたオブジェクトをオブジェクト変数に保存します:
LocalDate newYearsEve = LocalDate.of(1999, 1, 1);
LocalDate
オブジェクトがある場合、メソッド get Year
、getMonthValue
、および 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(); } }
上記のサンプル プログラムの焦点は、その方法を示すことです。実装の詳細を知らなくても、クラスのインターフェイスを使用して非常に複雑なタスクを完了するには
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 サイトの他の関連記事を参照してください。