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 -- Stringbuild、Date和Calendar類JavaUI
- Java Date Time 教程-java.util.Calendar和GregorianCalendarJavaGo
- Java 時間類 Date、Calendar 及用法Java
- 整理Java基礎知識--Calendar 類Java
- 如何將Java 8 Calendar轉換為 LocalDateTime?JavaLDA
- Planning Calendar
- Calendar類
- calendar-pythonPython
- HTML input date calendarHTML
- Calendar類在Java中的應用與日期時間處理Java
- 自定義mpvue-calendarVue
- GOOGLE CALENDAR 是否有desktop版本?Go
- 效能優化之拋棄Calendar優化
- HTML input time calendar 控制元件HTML控制元件
- HTML input week帶周calendar控制元件HTML控制元件
- HTML input month帶月calendar控制元件HTML控制元件
- Calendar日曆型別常見方法(必看!!)型別
- Python3 日曆(Calendar)模組介紹Python
- VUE elementUI calendar 根據日期段標記日期VueUI
- 推薦簡約漂亮的小程式外掛 calendar
- 選單欄日曆提醒工具:Calendar 366 II for MacMac
- 微軟 microsoft calendar control 11.0 控制元件下載微軟ROS控制元件
- Calendar原始碼--JDK是怎麼計算時間的原始碼JDK
- PHP中非常好玩的Calendar擴充套件學習PHP套件
- 極簡日曆軟體:Just Calendar for Mac中文版Mac
- 還在用Calendar操作Date?Java8都棄用了,還不知道它的這款強大的工具嗎?Java
- Python零基礎學習筆記(四十)——datetime和CalendarPython筆記
- Just Calendar for Mac(就是一個日曆)2.0.4免啟用版Mac
- 利用Microsoft Graph開發微軟的Exchange Calendar會議、TeamROS微軟
- Quartz.Net系列(十二):六大Calendar(Annual、Cron、Daily、Holiday、Monthly、Weekly)quartzAI
- 適配mpvue平臺的的微信小程式日曆元件mpvue-calendarVue微信小程式元件
- Date 的 getHours() 和 getMinutes() 還有 getSeconds() 都是過時的方法,所以要用 Calendar 類
- 華為攜手Work Shift Calendar (Shifter),將工作效率提升至更高水平
- vue-calendar 基於 vue 2.0 開發的輕量,高效能日曆元件Vue元件
- 強大日曆管理軟體Calendar 366 II for Mac v2.15.2中文啟用版Mac
- 選單欄日曆軟體:Air Calendar 空氣日曆 for Mac v1.9中文啟用版AIMac
- vue3-hash-calendar,一款基於vue3.x開發的移動端日期時間選擇元件Vue元件
- Mac必備軟體Calendar 366 II | 蘋果電腦最完整、最通用、最強大的選單欄日曆軟體Mac蘋果