Android日期加任意天数计算方式
生活随笔
收集整理的這篇文章主要介紹了
Android日期加任意天数计算方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求
最近遇到了一個需求,任意一個日期 加10天,再加20天,再加30天,應該怎么計算?要考慮大小月(30天/31天),如果是2月還要考慮平年閏年。想想都會很頭疼。一大推邏輯等著自己處理。
android有一個 Calendar 類可以幫到我們非常簡單的處理這個問題。
Calendar
先看下實現方法。
//獲取Calendar的實例,默認是當前的時間Calendar rightNow = Calendar.getInstance();//當前時間 加10天rightNow.add(Calendar.DAY_OF_YEAR, 10);//new SimgpleDateFormat 進行格式化SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//利用Calendar的getTime方法,將時間轉化為Date對象Date date = rightNow.getTime();//利用SimpleDateFormat對象 把Date對象格式化String format = sdf.format(date);Log.e(TAG, "this time add 10 days = " + format);輸出日志this date add 10 days = 2019-06-29所有方法的解釋都寫在注釋上了,也比較簡單,不再解釋了。
分析一波
//獲取Calendar實例Calendar rightNow = Calendar.getInstance();public static Calendar getInstance(){// 傳入默認的時區,和默認的地區return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));}//調用了Calendar的兩個參數的實例化方法private static Calendar createCalendar(TimeZone zone, Locale aLocale){// BEGIN Android-changed: only support GregorianCalendar herereturn new GregorianCalendar(zone, aLocale);// END Android-changed: only support GregorianCalendar here}//然后調用了子類GregorianCalendar的方法public GregorianCalendar(TimeZone zone, Locale aLocale) {super(zone, aLocale);gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);//這個System.currentTimeMillis()方法應該都很熟悉,獲取系統當前時間(毫秒值)。//這個setTimeMillis()方法,是調用了父類Calendar的方法。//所以如果我們想要對當前時間/日期進行操作的話,直接Calander.getInstance()就可以。setTimeInMillis(System.currentTimeMillis());}任意日期的加減計算
上面的分析,我們知道了 setTimeMillis(long millis) 方法可以為 Calendar 設置時間。其實還有個方法 setTime(Date date) 方法也可以設置。
//看源碼我們也可以看到,setTime()調用的也是 setTimeMillis()public final void setTime(Date date) {setTimeInMillis(date.getTime());}任意日期的加減計算
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);String source = "2019-06-10";try {Date date = sdf.parse(source);Calendar rightNow = Calendar.getInstance();rightNow.setTime(date);rightNow.add(Calendar.DAY_OF_YEAR, -60);Date time = rightNow.getTime();String format = sdf.format(time);Log.e(TAG, source + "減60天為:" + format);//2019-06-10減60天為:2019-04-11} catch (ParseException e) {e.printStackTrace();}其他功能
除了以上功能,Calenar 還有一些實用的小功能。
獲取星期數
Calendar rightNow = Calendar.getInstance(); int dayOfWeek = rightNow.get(Calendar.DAY_OF_WEEK); Log.e(TAG, " dayOfWeek = " + dayOfWeek);輸出日志: dayOfWeek = 4 當天2019-06-19 是周三。這里要注意的是,返回4并不是星期四的意思。對應關系,可以看下面源碼。
Calendar.classpublic final static int SUNDAY = 1;public final static int MONDAY = 2;public final static int TUESDAY = 3;public final static int WEDNESDAY = 4;public final static int THURSDAY = 5;public final static int FRIDAY = 6;public final static int SATURDAY = 7;獲取今天是公歷年的第幾天
int dayOfYear = rightNow.get(Calendar.DAY_OF_YEAR); Log.e(TAG, "dayOfYear = " + dayOfYear);輸入日志 dayOfYear = 170獲取其他信息
Calendar.YEAR //年份Calendar.MONTH // 月份 (從0開始,1月 = 0)Calendar.WEEK_OF_YEAR //公歷年份的第幾周Calendar.DATE //和DAY_OF_MONTH一樣Calendar.DAY_OF_MONTH //日份Calendar.DAY_OF_YEAR //公歷年的第幾天Calendar.DAY_OF_WEEK //星期數Calendar.DAY_OF_WEEK_IN_MONTH //月份的第幾周 Calendar.WEEK_OF_MONTH //月份的第幾周 這兩個區別是。 WEEK_OF_MONTH:是日歷式的第幾周。比如某月的1號是周日,則該月的2號就是第二周。 DAY_OF_WEEK_IN_MONTH:是單純的按照天數來算。比如,一月31天,則一月一共有5周,1-7號為第一周,8-14號為第二周...Calendar.AM_PM //上午還是下午Calendar.HOUR //小時數(12小時制 0-11點)Calendar.HOUR_OF_DAY //小時數(24小時制 0-23點)Calendar.MINUTE //分鐘數Calendar.SECOND //秒數Calendar.MILLISECOND //毫秒數Calendar.ZONE_OFFSET //時區偏移量(單位是毫秒) 比如我們在東八區,所以要加8h,所以是 8*60*60*1000 = 28800000Calendar.FIELD_COUNT //夏令時偏移量(單位是毫秒)Calendar 是一個比較實用的日歷計算,獲取日期的工具類。這里也僅僅是把我遇到的我用過的功能做了個小總結。
如有錯誤,歡迎指正。
總結
以上是生活随笔為你收集整理的Android日期加任意天数计算方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity UGUI图集打包与动态使用(
- 下一篇: android sina oauth2.