计算两个Calendar类参数相差的天数

来源:互联网 发布:淘宝客吧 百度贴吧 编辑:程序博客网 时间:2024/05/21 09:48

初学Android,遇到这个问题还不知道怎么办,Android没有提供函数来计算,而且自己数据库用的是MySQL,也是自己不熟悉的数据库,就没有过多的想用SQL来写。

在网上找了几个,感觉有些复杂,想了想有一点思路,写出来可以实现

思路:

  1. 首先判断是否日期一前一后
  2. 边计数边增加比较早的日期
  3. 等到两个日期一样时,停止操作,返回计数
/** * Created by Harry on 2015/4/27. * This class is used for compute days between two different dates */public class DateCompute {    private static String TAG = DateCompute.class.getName();    private static Calendar startDate;    private static Calendar endDate;    private static int dayCount;    public DateCompute(Calendar p_startDate, Calendar p_endDate) {        startDate = p_startDate;        endDate = p_endDate;        dayCount = 0;    }    /**     * Since both are Calendar, there is no need to add one more month each.     * @return     */    public int computeCalendar(){        /*if startDate is before endDate, loop continues*/        while(startDate.before(endDate)){            startDate.add(Calendar.DAY_OF_MONTH, 1);            dayCount++;        }        Log.v(TAG, "$$$$$$ days between two dates are : " + dayCount);        return dayCount;    }}

注意:

  1. Calendar类中,MONTH是比真实日期小1的,所以传递参数的时候注意变换
  2. 如果遇到String类型的,要先转换成Calendar,下面的代码可以实现
这里我自己定义的字符串日期格式为:yyyy-MM-dd

方法也就是取substring,然后分别赋值给Calendar对象(数据全是数据库里提取的数据,数据库函数就没有贴上了)

    private static void calendarMinus(){        Calendar calendar1 = Calendar.getInstance();        Calendar calendar2 = Calendar.getInstance();        String sql = "select startDate, endDate from habit where userID = 2 and habitID = 2;";        Cursor cursor = Database.getDatabase().getWritableDatabase().rawQuery(sql, null);        String start, end;        cursor.moveToFirst();        start = cursor.getString(cursor.getColumnIndex("startDate"));        end = cursor.getString(cursor.getColumnIndex("endDate"));        /*yyyy-MM-dd*/        calendar1.set(Calendar.YEAR, Integer.parseInt(start.substring(0,4)));        calendar1.set(Calendar.MONTH, Integer.parseInt(start.substring(5,7)));        calendar1.set(Calendar.DAY_OF_MONTH, Integer.parseInt(start.substring(8,10)));        calendar2.set(Calendar.YEAR, Integer.parseInt(end.substring(0,4)));        calendar2.set(Calendar.MONTH, Integer.parseInt(end.substring(5,7)));        calendar2.set(Calendar.DAY_OF_MONTH, Integer.parseInt(end.substring(8,10)));        DateCompute compute = new DateCompute(calendar1, calendar2);        compute.computeCalendar();    }


0 0