在我們完成這個行事曆設計之前,需要先了解Java中的預先定義類別LocalDate
的一些用法
LocalDate.now() // 2022-07-01
會建構一個新對象,表示建構這個對象時的日期。
LocalDate.of(1999, 1, 1)
可以提供年、月和日來建構對應一個特定日期的物件:
#當然,通常我們都希望將建構的物件保存在一個物件變數中:
LocalDate newYearsEve = LocalDate.of(1999, 1, 1);
當有了一個LocalDate
對象,可以用方法getYear
、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 Tue Wed Thu Fri Sat Sun
目前日期使用
1* 2 1 3 ## 4 5 9 10
11 12 13 14 15 16 17
18 19 20 21
號標記。可以看到,這個程式需要知道如何計算某月份的天數以及一個給定日期對應是星期幾。 步驟分解
`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是目前日期,這個日期則用一個
*標記。接下來,把date推進到下一天。如果到達新的一周的第一天,則換行列印:<pre class="brush:java;">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();
}</pre>
我們不確定這個月有多少天,是28、29、30還是31,所以我們不知道結束是什麼時候。實際上,只要date還在當月就要繼續迭代
完整程式碼
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天的日期
以上是Java怎麼利用LocalDate類別實現日曆設計的詳細內容。更多資訊請關注PHP中文網其他相關文章!