1. 程式人生 > 實用技巧 >LocalDate編寫的日曆小程式---來自Java核心技術卷1

LocalDate編寫的日曆小程式---來自Java核心技術卷1

Date類和LocalDate類
這兩個類有重複的功能,但是Date類表示的是時間點,LocalDate表示的是日曆表示法。對於LocalDate來說,儘量不要使用構造器來構造LocalDate類的物件,應該使用靜態工廠(factory)方法。

常用API(Java 8)
匯入:
import java.time.LocalDate;
靜態方法:
static LocalTime now(): 構造一個表示當前日期的物件
static LocalTime of(int year, int month, int day): 用給定日期構造物件
訪問器方法:
int getYear(): 獲取年
int getMonthValue(): 獲取月
int getDayOfMonth(): 獲取日
DayOfWeek getDayOfWeek(): 得到當前日期是星期幾,作為DayOfWeek類的例項,具體星期幾需要呼叫getValue()來獲取
修改方法(但不是更改器):
LocalDate plusDays(int n): 生成當前日期n天后的日期,n為負,則是n天前
LocalDate minusDays(int n): 生成當前日期減去n的日期

package Date;
import java.time.*;
public class CalendarTest {
    public static void main(String[] args) {
        //LocalDate date = LocalDate.now(); //獲取當前系統日期
        //date = date.plusDays(-6); //倒退6天
        LocalDate date = LocalDate.of(2020, 11, 22);
        int month = date.getMonthValue(); //月份
        int today = date.getDayOfMonth(); //天數
        //回到today - (today - 1),也就是第1天的日期
        date = date.minusDays(today - 1);
        DayOfWeek weekday = date.getDayOfWeek(); //該日期對應星期幾
        int value = weekday.getValue(); //Sunday對應7
        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();
    }
}

Output:
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