Androidは2つの日付の間の日数を計算し、すべての日付を印刷します.

2248 ワード

次のコードは、2つの日付の間の日数を計算し、すべての日付を印刷します.
注:開始時、日数を増加する時、1日のミリ秒数は直接24*60*60*1000で徐々に日数を増加して、更にテストする時発見して、2つの日付の間の日数が24日を超える時、印刷する日付はかえって開始日の前で、(例えば2016/12/18-2017/1/23を印刷して、印刷する日付はかえって2016/12/1がある)、後で発見した原因は24*60*60*1000が1つのint値で、int値の取値範囲は2の31回である:+/-2147483648で、最大数を超えると最小数になり、逆に日付が小さくなり、24*60*60*1000をlongタイプの値にすればよい.private long static final long ONE_DAY_MS=24*60*60*1000
  /**
     *            
     * @param startTime
     * @param endTime
     */
    private void betweenDays(long startTime,long endTime,long mills_select,int code){
        
        Date date_start=new Date(startTime);
        Date date_end=new Date(endTime);

        //               0   
        Calendar fromCalendar = Calendar.getInstance();
        fromCalendar.setTime(date_start);
        fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
        fromCalendar.set(Calendar.MINUTE, 0);
        fromCalendar.set(Calendar.SECOND, 0);
        fromCalendar.set(Calendar.MILLISECOND, 0);

        Calendar toCalendar = Calendar.getInstance();
        toCalendar.setTime(date_end);
        toCalendar.set(Calendar.HOUR_OF_DAY, 0);
        toCalendar.set(Calendar.MINUTE, 0);
        toCalendar.set(Calendar.SECOND, 0);
        toCalendar.set(Calendar.MILLISECOND, 0);
        
        int s = (int) ((toCalendar.getTimeInMillis() - fromCalendar.getTimeInMillis())/ (ONE_DAY_MS));
        if(s>0){
            for(int i = 0;i<=s;i++){
                long todayDate = fromCalendar.getTimeInMillis() + i * ONE_DAY_MS;
                /**
                 * yyyy-MM-dd E :2012-09-01 
                 */
                Log.i("    ",Utils.getCustonFormatTime(todayDate,"yyyy-MM-dd"));
            }
        }else {//        
                Log.i("    ",Utils.getCustonFormatTime(startTime,"yyyy-MM-dd"));
        }
    }
Utils.getCustomonFormatTime()メソッドコードは次のとおりです.
/**
     *         
     *
     * @param time              
     * @param formatStr       
     * @return
     */
    public static String getCustonFormatTime(long time, String formatStr) {
        SimpleDateFormat format = new SimpleDateFormat(formatStr);
        Date d1 = new Date(time);
        return format.format(d1);
    }