JAVA Calendar
Calendar.getInstance() 中所獲得的例項就是一個 "GreogrianCalendar" 物件(與透過 new GregorianCalendar() 獲得的結果一致)。
Calendar 與 Date 的轉換
Calendar calendar = Calendar.getInstance();
// 從一個 Calendar 物件中獲取 Date 物件
Date date = calendar.getTime();
// 將 Date 物件反應到一個 Calendar 物件中,
// Calendar/GregorianCalendar 沒有建構函式可以接受 Date 物件
// 所以我們必需先獲得一個例項,然後設定 Date 物件
calendar.setTime(date);
注意的事項:
1. Calendar 的 set() 方法
set(int field, int value) - 是用來設定"年/月/日/小時/分鐘/秒/微秒"等值
field 的定義在 Calendar 中
set(int year, int month, int day, int hour, int minute, int second) 但沒有
set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不會自動將 MilliSecond 清為 0。
另外,月份的起始值為0而不是1,所以要設定八月時,我們用7而不是8。
calendar.set(Calendar.MONTH, 7);
我們通常需要在程式邏輯中將它清為 0, Calendar 不是馬上就重新整理其內部的記錄
在 Calendar 的方法中,get() 和 add() 會讓 Calendar 立刻重新整理。Set() 的這個特性會給我們的開發帶來一些意想不到的結果。
add() 與 roll() 的區別
add() 的功能非常強大,add 可以對 Calendar 的欄位進行計算。如果需要減去值,那麼使用負數值就可以了,如 add(field, -value)。
add() 有兩條規則:
當被修改的欄位超出它可以的範圍時,那麼比它大的欄位會自動修正。如:
Calendar cal1 = Calendar.getInstance();
cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1,對嗎?
System.out.println(cal1.getTime()); //結果是 2000-9-30
另一個規則是,如果比它小的欄位是不可變的(由 Calendar 的實現類決定),那麼該小欄位會修正到變化最小的值。
以上面的例子,9-31 就會變成 9-30,因為變化最小。
Roll() 的規則只有一條:
當被修改的欄位超出它可以的範圍時,那麼比它大的欄位不會被修正。如:
Calendar cal1 = Calendar.getInstance();
cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 週日
cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 週二
cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 週日
cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 週日
WEEK_OF_MONTH 比 MONTH 欄位小,所以 roll 不能修正 MONTH 欄位。
作者:芥末無疆sss
連結:
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2816170/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java Calendar日曆類Java
- java calendar SimpleDateFormat Date 類JavaORM
- 整理Java基礎知識--Calendar 類Java
- Java 時間類 Date、Calendar 及用法Java
- java -- Stringbuild、Date和Calendar類JavaUI
- Java學習--Calendar 類的應用Java
- Java Date Time 教程-java.util.Calendar和GregorianCalendarJavaGo
- Calendar GData API / Google Calendar Connectors deprecationAPIGo
- calendar 模組
- google calendarGo
- 如何將Java 8 Calendar轉換為 LocalDateTime?JavaLDA
- .net google calendarGo
- HTML input date calendarHTML
- calendar-pythonPython
- 自定義mpvue-calendarVue
- Calendar 類的應用
- Calendar類在Java中的應用與日期時間處理Java
- google calendar api v3GoAPI
- 0ffice365 Calendar APIAPI
- 日曆控制元件(Calendar)控制元件
- HTML input time calendar 控制元件HTML控制元件
- GOOGLE CALENDAR 是否有desktop版本?Go
- 效能優化之拋棄Calendar優化
- date類與calendar的區別
- HTML input datetime calendar控制元件HTML控制元件
- Java學習關於時間操作的應用類--Date類、Calendar類及其子類Java
- HTML input week帶周calendar控制元件HTML控制元件
- HTML input month帶月calendar控制元件HTML控制元件
- Calendar日曆型別常見方法(必看!!)型別
- Python3 日曆(Calendar)模組介紹Python
- VUE elementUI calendar 根據日期段標記日期VueUI
- [PY3]——時間處理——datetime | calendar
- Calendar:計算兩個日期相差的天數
- String Date Calendar之間的轉換(轉)
- Google Calendar免費手機提醒功能試用Go
- 選單欄日曆提醒工具:Calendar 366 II for MacMac
- 推薦簡約漂亮的小程式外掛 calendar
- Calendar -『為移動端而生』的自定義日曆