生活随笔
收集整理的這篇文章主要介紹了
Android中Calendar类的用法总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Calendar是Android開發中需要獲取時間時必不可少的一個工具類,通過這個類可以獲得的時間信息還是很豐富的,下面做一個總結,以后使用的時候就不用總是去翻書或者查資料了。
在獲取時間之前要先獲得Calendar這個類的實例:
[java] view plaincopy
private?Calendar?c?=?Calendar.getInstance();?? 然后就可以用這個變量來獲取時間了。
獲得當前的年份
[java] view plaincopy
Log.i("MainActivityFilter",?"當前的年份為:"?+?c.get(Calendar.YEAR));??
獲得當前的月份
[java] view plaincopy
Log.i("MainActivityFilter",?"當前的月份為:"?+?(c.get(Calendar.MONTH)?+?1));??
這個要特別注意一下,月份在Calendar中是從0開始的,也就是說1月份的值為0,因此需要加1才是現實中表示的月份
獲得今天是本月的第幾天,有兩種寫法,結果是一樣的
[java] view plaincopy
Log.i("MainActivityFilter",?"DATE:"?+?c.get(Calendar.DATE));??Log.i("MainActivityFilter",?"DAY_OF_MONTH:"?+?c.get(Calendar.DAY_OF_MONTH));??
獲得今天是本年的第幾天
[java] view plaincopy
Log.i("MainActivityFilter",?"今天是今年的第"?+?c.get(Calendar.DAY_OF_YEAR)?+?"天");??
獲得今天在本月的第幾周
[java] view plaincopy
Log.i("MainActivityFilter",?"今天在本月的第"?+?c.get(Calendar.DAY_OF_WEEK_IN_MONTH)?+?"周");??
獲得今天是周幾,這里不能直接將返回值當做周幾,而應該與Calendar用于表示周幾的常量搭配使用,返回值為3不代表今天是周三
[java] view plaincopy
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 plaincopy
Log.i("MainActivityFilter",?"現在是"?+?c.get(Calendar.HOUR)?+?"點");??
但現在其實是下午三點,所以需要區分是上午還是下午
[java] view plaincopy
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 plaincopy
Log.i("MainActivityFilter",?"現在是"?+?c.get(Calendar.HOUR_OF_DAY)?+?"點");??
獲得現在是幾分
[java] view plaincopy
Log.i("MainActivityFilter",?"現在是"?+?c.get(Calendar.MINUTE)?+?"分");??
獲得現在是幾秒
[java] view plaincopy
Log.i("MainActivityFilter",?"現在是"?+?c.get(Calendar.SECOND)?+?"秒");??
獲得現在是幾毫秒
[java] view plaincopy
Log.i("MainActivityFilter",?"現在是"?+?c.get(Calendar.MILLISECOND)?+?"毫秒");??
Calendar雖然不提供顯示規范格式時間的方法,但是可以用SimpleDateFormat來輸出規范的字符串,這里簡單示范一下用法
[java] view plaincopy
SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy年MM月dd日");??Log.i("MainActivityFilter",?sdf.format(c.getTime()));??
關于SimpleDateFormat的更詳細的用法之后會用另外一篇文章來講
Calendar還提供了一些其它的方法,接下來關于時間的輸出都是用SimpleDateFormat來輸出的,就不貼輸出的代碼了。
增加日期中的某個域的值,比如想獲得明天的日期,就需要向DAY域加1
[java] view plaincopy
c.add(Calendar.DAY_OF_MONTH,?1);?? 加之前
加之后
這樣對程序員就比較方便,不用去考慮各種界限的問題
比較兩個日期是否相等
[java] view plaincopy
private?Calendar?c?=?Calendar.getInstance();??private?Calendar?d?=?Calendar.getInstance();?? [java] view plaincopy
Log.i("MainActivityFilter",?"c和d是否相等:"?+?c.equals(d));??c.add(Calendar.YEAR,?1);??Log.i("MainActivityFilter",?"c和d是否相等:"?+?c.equals(d));??
比較兩個日期哪個更靠后一些
[java] view plaincopy
private?Calendar?c?=?Calendar.getInstance();??private?Calendar?d?=?Calendar.getInstance();??private?SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy年MM月dd日?HH:mm");?? [java] view plaincopy
d.add(Calendar.DAY_OF_MONTH,?1);??Log.i("MainActivityFilter",?"d在c后面:"?+?d.after(c));??
同樣,有方法可以用來判斷兩個日期哪個更靠前
[java] view plaincopy
Log.i("MainActivityFilter",?"c在d前面:"?+?c.before(d));??
清空某一個域并用這個域最小的值代替和清空所有的域然后全部用最小的值代替
[java] view plaincopy
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 plaincopy
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 plaincopy
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模塊包含本文使用的代碼。
轉載于:https://www.cnblogs.com/Free-Thinker/p/7477576.html
總結
以上是生活随笔為你收集整理的Android中Calendar类的用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。