1.班級轉Date
班級Calendar
程序員喜歡這個Date
類,因為它的簡單性和對 Unix 標準的支持,但如您所知,每朵玫瑰都有刺。
程序員想要一個“智能”Date
類。他們以課堂的形式得到了他們想要的東西Calendar
。它被認為是一種不僅可以存儲日期,還可以對日期執行困難操作的方法。
該類的全名Calendar
是 java.util.Calendar。如果您決定在代碼中使用它,請不要忘記將它添加到導入語句中。
您可以使用以下命令創建Calendar
對象:
Calendar date = Calendar.getInstance();
該類的靜態getInstance()
方法Calendar
創建一個Calendar
用當前日期初始化的對象。您想要的日曆將根據運行該程序的計算機的設置創建。
或者更準確地說,你得到的日曆……那是因為地球上的人類並不局限於單一的日曆。相反,他們使用了很多。幾乎每個人都與某種宗教或國家有關。該類Calendar
支持其中的 3 個:
日曆 | 描述 |
---|---|
公曆 | 基督教公曆 |
佛歷 | 佛歷 |
日本皇曆 | 日本皇曆 |
但也有中國和阿拉伯日曆。基本上,處理時間並不像看起來那麼容易。
在編寫本課程時,中國曆法的正式年份是 4716。根據伊斯蘭歷,年份是 1398 年。歡迎來到大世界,我的程序員朋友。
2.創建一個日曆對象
我們將使用公曆,因為它是世界上最通用的。至少在中國購買甲骨文並將中國日曆作為主要日曆之前。
您可以使用如下語句創建具有任何日期的日曆對象:
Calendar date = new GregorianCalendar(year, month, day);
是的,你必須GregorianCalendar
每次都寫。除了Calendar
,您還可以編寫GregorianCalendar
— 這也行得通。但是寫作只是Calendar
更短。
年份必須全寫,例如,您不能用 19 代替 2019。月份仍然從零開始編號。但和以前一樣,一個月中的天數不是從零開始編號的。書呆子!
要設置時間和日期,您需要將時間作為附加參數傳遞:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
如果需要,您甚至可以以毫秒為單位傳遞。它們是秒數之後的參數。
3. 在屏幕上顯示一個日曆對象
如果您只是在屏幕上打印一個日曆對象,您將不會對結果很滿意。
代碼 |
---|
|
控制台輸出 |
|
這裡要記住的是日曆是日曆,而不是日期:它有各種設置,都會顯示在屏幕上。
SimpleDateFormat
用一個對象來顯示日曆是合適的,但在我們研究它之前,你可以使用這個生活技巧。
Date date = calendar.getTime();
對象Calendar
可以很容易地轉換為Date
對象,並且您已經知道如何顯示Date
對象。您可以使用這樣的代碼將Calendar
對象轉換為Date
:
使用getTime()
方法:
代碼 | 控制台輸出 |
---|---|
|
|
那是完全不同的事情,不是嗎?
4. 處理日期元素
要獲取日期的特定元素(例如年、月、...),該類Calendar
具有get()
方法。這是一個單一的方法,但它有參數:
int month = calendar.get(Calendar.MONTH);
其中calendar
是Calendar
變量,MONTH
是類的常量字段Calendar
。
您將類的常量字段之一Calendar
作為參數傳遞給該get
方法,並獲得所需的值作為結果。
例子
代碼 | 描述 |
---|---|
|
紀元( 在 共同 紀元 之前 或 之後) |
要更改日期的元素,請使用以下set
方法:
calendar.set(Calendar.MONTH, value);
其中calendar
是Calendar
變量,MONTH
是類的常量字段Calendar
。
使用set
方法時,將類的一個Calendar
常量字段作為第一個參數傳遞,將新值作為第二個參數傳遞。
例子
代碼 | 描述 |
---|---|
|
年 = 2019 月 = 七月(從 0 開始編號) 第 4 天 小時 分鐘 秒 |
5.Calendar
類的常量
該類的常量字段Calendar
不限於用於命名日期元素的字段。似乎有適合各種場合的場地。
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
例如,有常量字段來引用月份:
還有星期幾:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
我們不會列出所有內容。如果您在代碼中看到這樣的常量,我們只是不想讓您感到驚訝。
使用常量使代碼更具可讀性,這就是程序員使用它們的原因。月份從零開始編號也是為了提高可讀性。或不。
Calendar
6. 更改對像中的日期
該類Calendar
有一個方法可以讓您以更智能的方式處理日期。例如,您可以向日期添加年、月或幾天。或者把他們帶走。此方法稱為add()
。使用它看起來像這樣:
calendar.add(Calendar.MONTH, value);
其中calendar
是Calendar
變量,MONTH
是類的常量字段Calendar
。
使用方法時,將類的一個常量字段作為第一個參數和第二個參數(要添加的新值)add
傳遞。Calendar
這是另一種智能方法。讓我們看看它有多聰明:
代碼 |
---|
|
控制台輸出 |
|
此方法了解 2019 年 2 月只有 28 天,因此結果日期為 3 月 1 日。
現在讓我們帶走2個月!我們應該得到什麼?2018 年 12 月 27 日!我們現在檢查一下。
要執行導致更早日期的操作,您需要將負值傳遞給該add()
方法:
代碼 |
---|
|
控制台輸出 |
|
有用!
這種方法考慮了月份和閏年的不同長度。總而言之,一個很棒的方法。這正是大多數使用日期的程序員所需要的。
7.日期的滾動元素
但有時在某些情況下我們不希望這種聰明的行為,例如,您想對日期的一部分做一些事情而不改變其他一切。
該類為此Calendar
提供了特殊方法。roll()
它的簽名就像add()
方法一樣,但是這個方法只改變日期的一個元素,其餘的保持不變。
例子:
代碼 |
---|
|
控制台輸出 |
|
我們更改了月份,但年份和日期保持不變。