標籤:min 結果 studio oar 日期 ring 常量 .com pop
Calendar是Android開發中需要擷取時間時必不可少的一個工具類,通過這個類可以獲得的時間資訊還是很豐富的,下面做一個總結,以後使用的時候就不用總是去翻書或者查資料了。
在擷取時間之前要先獲得Calendar這個類的執行個體:
[java] view plain copy
- private Calendar c = Calendar.getInstance();
然後就可以用這個變數來擷取時間了。
獲得當前的年份
[java] view plain copy
- Log.i("MainActivityFilter", "當前的年份為:" + c.get(Calendar.YEAR));
獲得當前的月份
[java] view plain copy
- Log.i("MainActivityFilter", "當前的月份為:" + (c.get(Calendar.MONTH) + 1));
這個要特別注意一下,月份在Calendar中是從0開始的,也就是說1月份的值為0,因此需要加1才是現實中表示的月份
獲得今天是本月的第幾天,有兩種寫法,結果是一樣的
[java] view plain copy
- Log.i("MainActivityFilter", "DATE:" + c.get(Calendar.DATE));
- Log.i("MainActivityFilter", "DAY_OF_MONTH:" + c.get(Calendar.DAY_OF_MONTH));
獲得今天是本年的第幾天
[java] view plain copy
- Log.i("MainActivityFilter", "今天是今年的第" + c.get(Calendar.DAY_OF_YEAR) + "天");
獲得今天在本月的第幾周
[java] view plain copy
- Log.i("MainActivityFilter", "今天在本月的第" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周");
獲得今天是周幾,這裡不能直接將傳回值當做周幾,而應該與Calendar用於表示周幾的常量搭配使用,傳回值為3不代表今天是周三
[java] view plain copy
- private void printDayOfWeek() {
- switch (c.get(Calendar.DAY_OF_WEEK)) {
- case Calendar.SUNDAY:
- Log.i("MainActivityFilter", "今天是周日");
- break;
- case Calendar.MONDAY:
- Log.i("MainActivityFilter", "今天是周一");
- break;
- case Calendar.TUESDAY:
- Log.i("MainActivityFilter", "今天是周二");
- break;
- case Calendar.WEDNESDAY:
- Log.i("MainActivityFilter", "今天是周三");
- break;
- case Calendar.THURSDAY:
- Log.i("MainActivityFilter", "今天是周四");
- break;
- case Calendar.FRIDAY:
- Log.i("MainActivityFilter", "今天是周五");
- break;
- case Calendar.SATURDAY:
- Log.i("MainActivityFilter", "今天是周六");
- break;
- default:
- break;
- }
- }
獲得今天是幾點,12小時制
[java] view plain copy
- Log.i("MainActivityFilter", "現在是" + c.get(Calendar.HOUR) + "點");
但現在其實是下午三點,所以需要區分是上午還是下午
[java] view plain copy
- if (c.get(Calendar.AM_PM) == Calendar.AM) {
- Log.i("MainActivityFilter", "現在是上午");
- } else {
- Log.i("MainActivityFilter", "現在是下午");
- }
使用Calendar.AM和Calendar.PM來協助判斷是上午還是下午,如果c.get(Calendar.AM_PM)擷取到的值和Calendar.AM相等就是上午,如果和Calendar.PM相等就是下午
Calendar也提供了擷取24小時制時間的方法
[java] view plain copy
- Log.i("MainActivityFilter", "現在是" + c.get(Calendar.HOUR_OF_DAY) + "點");
獲得現在是幾分
[java] view plain copy
- Log.i("MainActivityFilter", "現在是" + c.get(Calendar.MINUTE) + "分");
獲得現在是幾秒
[java] view plain copy
- Log.i("MainActivityFilter", "現在是" + c.get(Calendar.SECOND) + "秒");
獲得現在是幾毫秒
[java] view plain copy
- Log.i("MainActivityFilter", "現在是" + c.get(Calendar.MILLISECOND) + "毫秒");
Calendar雖然不提供顯示標準格式時間的方法,但是可以用SimpleDateFormat來輸出規範的字串,這裡簡單示範一下用法
[java] view plain copy
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
- Log.i("MainActivityFilter", sdf.format(c.getTime()));
關於SimpleDateFormat的更詳細的用法之後會用另外一篇文章來講
Calendar還提供了一些其它的方法,接下來關於時間的輸出都是用SimpleDateFormat來輸出的,就不貼輸出的代碼了。
增加日期中的某個域的值,比如想獲得明天的日期,就需要向DAY域加1
[java] view plain copy
- c.add(Calendar.DAY_OF_MONTH, 1);
加之前
加之後
這樣對程式員就比較方便,不用去考慮各種界限的問題
比較兩個日期是否相等
[java] view plain copy
- private Calendar c = Calendar.getInstance();
- private Calendar d = Calendar.getInstance();
[java] view plain copy
- Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));
- c.add(Calendar.YEAR, 1);
- Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));
比較兩個日期哪個更靠後一些
[java] view plain copy
- private Calendar c = Calendar.getInstance();
- private Calendar d = Calendar.getInstance();
- private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
[java] view plain copy
- d.add(Calendar.DAY_OF_MONTH, 1);
- Log.i("MainActivityFilter", "d在c後面:" + d.after(c));
同樣,有方法可以用來判斷兩個日期哪個更靠前
[java] view plain copy
- Log.i("MainActivityFilter", "c在d前面:" + c.before(d));
清空某一個域並用這個域最小的值代替和清空所有的域然後全部用最小的值代替
[java] view plain copy
- c.clear(Calendar.MONTH);
- d.clear();
-
- Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
- Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));
獲得Calendar對象的一個深拷貝
[java] view plain copy
- d = (Calendar) c.clone();
-
- Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
- Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));
-
- c.add(Calendar.YEAR, 1);
-
- Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
- Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));
比較兩個Calendar哪個在前哪個在後的方法
如果調用這個方法的Calendar執行個體比參數給出的Calendar執行個體要靠前一些,返回-1,如果要靠後一些,返回1,如果相等,返回0
[java] view plain copy
- d = (Calendar) c.clone();
-
- Log.i("MainActivityFilter", "比較的結果:" + c.compareTo(d));
-
- c.add(Calendar.YEAR, 1);
-
- Log.i("MainActivityFilter", "比較的結果:" + c.compareTo(d));
-
- d.add(Calendar.YEAR, 2);
-
- Log.i("MainActivityFilter", "比較的結果:" + c.compareTo(d));
將當前Calendar對象轉換為Date對象
為Calendar對象的網域設定值的一些方法
還有將Date對象設定給Calendar對象的方法
Calendar還提供了一些關於時區,地區方面的方法,還有一些奇怪的方法,比如擷取某個Calendar所處的時間是公元前還是公元後的方法。。。這些方法如果以後在實戰中有運用到,再來更新這篇文章。
本篇文章中所使用到的部分代碼已經上傳至github,地址:https://github.com/sysukehan/AndroidTests.Git,為android Studio項目,其中的CalendarTest模組包含本文使用的代碼。
Android中Calendar類的用法總結