1. 程式人生 > >Android中Calendar類的用法總結

Android中Calendar類的用法總結

jsb ews 寫法 需要 key data- minute bar 來講

Calendar是Android開發中需要獲取時間時必不可少的一個工具類,通過這個類可以獲得的時間信息還是很豐富的,下面做一個總結,以後使用的時候就不用總是去翻書或者查資料了。

在獲取時間之前要先獲得Calendar這個類的實例:

[java] view plain copy
  1. private Calendar c = Calendar.getInstance();

然後就可以用這個變量來獲取時間了。
獲得當前的年份

[java] view plain copy
  1. Log.i("MainActivityFilter", "當前的年份為:" + c.get(Calendar.YEAR));

技術分享

獲得當前的月份

[java] view plain copy
  1. Log.i("MainActivityFilter", "當前的月份為:" + (c.get(Calendar.MONTH) + 1));

技術分享

這個要特別註意一下,月份在Calendar中是從0開始的,也就是說1月份的值為0,因此需要加1才是現實中表示的月份

獲得今天是本月的第幾天,有兩種寫法,結果是一樣的

[java] view plain copy
  1. Log.i("MainActivityFilter", "DATE:" + c.get(Calendar.DATE));
  2. Log.i("MainActivityFilter", "DAY_OF_MONTH:" + c.get(Calendar.DAY_OF_MONTH));

技術分享

獲得今天是本年的第幾天

[java] view plain copy
  1. Log.i("MainActivityFilter", "今天是今年的第" + c.get(Calendar.DAY_OF_YEAR) + "天");

技術分享


獲得今天在本月的第幾周

[java] view plain copy
  1. Log.i("MainActivityFilter", "今天在本月的第" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周");

技術分享

獲得今天是周幾,這裏不能直接將返回值當做周幾,而應該與Calendar用於表示周幾的常量搭配使用,返回值為3不代表今天是周三

[java] view plain copy
  1. private void printDayOfWeek() {
  2. switch (c.get(Calendar.DAY_OF_WEEK)) {
  3. case Calendar.SUNDAY:
  4. Log.i("MainActivityFilter", "今天是周日");
  5. break;
  6. case Calendar.MONDAY:
  7. Log.i("MainActivityFilter", "今天是周一");
  8. break;
  9. case Calendar.TUESDAY:
  10. Log.i("MainActivityFilter", "今天是周二");
  11. break;
  12. case Calendar.WEDNESDAY:
  13. Log.i("MainActivityFilter", "今天是周三");
  14. break;
  15. case Calendar.THURSDAY:
  16. Log.i("MainActivityFilter", "今天是周四");
  17. break;
  18. case Calendar.FRIDAY:
  19. Log.i("MainActivityFilter", "今天是周五");
  20. break;
  21. case Calendar.SATURDAY:
  22. Log.i("MainActivityFilter", "今天是周六");
  23. break;
  24. default:
  25. break;
  26. }
  27. }

技術分享

獲得今天是幾點,12小時制

[java] view plain copy
  1. Log.i("MainActivityFilter", "現在是" + c.get(Calendar.HOUR) + "點");

技術分享

但現在其實是下午三點,所以需要區分是上午還是下午

[java] view plain copy
  1. if (c.get(Calendar.AM_PM) == Calendar.AM) {
  2. Log.i("MainActivityFilter", "現在是上午");
  3. } else {
  4. Log.i("MainActivityFilter", "現在是下午");
  5. }

使用Calendar.AM和Calendar.PM來幫助判斷是上午還是下午,如果c.get(Calendar.AM_PM)獲取到的值和Calendar.AM相等就是上午,如果和Calendar.PM相等就是下午

技術分享

Calendar也提供了獲取24小時制時間的方法

[java] view plain copy
  1. Log.i("MainActivityFilter", "現在是" + c.get(Calendar.HOUR_OF_DAY) + "點");


技術分享


獲得現在是幾分

[java] view plain copy
  1. Log.i("MainActivityFilter", "現在是" + c.get(Calendar.MINUTE) + "分");

技術分享

獲得現在是幾秒

[java] view plain copy
  1. Log.i("MainActivityFilter", "現在是" + c.get(Calendar.SECOND) + "秒");

技術分享

獲得現在是幾毫秒

[java] view plain copy
  1. Log.i("MainActivityFilter", "現在是" + c.get(Calendar.MILLISECOND) + "毫秒");

技術分享

Calendar雖然不提供顯示規範格式時間的方法,但是可以用SimpleDateFormat來輸出規範的字符串,這裏簡單示範一下用法

[java] view plain copy
  1. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
  2. Log.i("MainActivityFilter", sdf.format(c.getTime()));

技術分享

關於SimpleDateFormat的更詳細的用法之後會用另外一篇文章來講

Calendar還提供了一些其它的方法,接下來關於時間的輸出都是用SimpleDateFormat來輸出的,就不貼輸出的代碼了。


增加日期中的某個域的值,比如想獲得明天的日期,就需要向DAY域加1

技術分享

[java] view plain copy
  1. c.add(Calendar.DAY_OF_MONTH, 1);

加之前

技術分享

加之後

技術分享

這樣對程序員就比較方便,不用去考慮各種界限的問題


比較兩個日期是否相等

技術分享

[java] view plain copy
  1. private Calendar c = Calendar.getInstance();
  2. private Calendar d = Calendar.getInstance();
[java] view plain copy
  1. Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));
  2. c.add(Calendar.YEAR, 1);
  3. Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));

技術分享

比較兩個日期哪個更靠後一些

技術分享

[java] view plain copy
  1. private Calendar c = Calendar.getInstance();
  2. private Calendar d = Calendar.getInstance();
  3. private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
[java] view plain copy
  1. d.add(Calendar.DAY_OF_MONTH, 1);
  2. Log.i("MainActivityFilter", "d在c後面:" + d.after(c));

技術分享


同樣,有方法可以用來判斷兩個日期哪個更靠前

技術分享

[java] view plain copy
  1. Log.i("MainActivityFilter", "c在d前面:" + c.before(d));

技術分享

清空某一個域並用這個域最小的值代替和清空所有的域然後全部用最小的值代替

技術分享

[java] view plain copy
  1. c.clear(Calendar.MONTH);
  2. d.clear();
  3. Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
  4. Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));

技術分享

獲得Calendar對象的一個深拷貝

技術分享

[java] view plain copy
  1. d = (Calendar) c.clone();
  2. Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
  3. Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));
  4. c.add(Calendar.YEAR, 1);
  5. Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
  6. Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));

技術分享


比較兩個Calendar哪個在前哪個在後的方法

技術分享

如果調用這個方法的Calendar實例比參數給出的Calendar實例要靠前一些,返回-1,如果要靠後一些,返回1,如果相等,返回0

[java] view plain copy
  1. d = (Calendar) c.clone();
  2. Log.i("MainActivityFilter", "比較的結果:" + c.compareTo(d));
  3. c.add(Calendar.YEAR, 1);
  4. Log.i("MainActivityFilter", "比較的結果:" + c.compareTo(d));
  5. d.add(Calendar.YEAR, 2);
  6. 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類的用法總結