(Java / Android)计算2个日期之间的天数,并以特定格式显示结果

时间:2012-04-25 23:15:23

标签: java android android-widget

我正在尝试计算两个日期之间的天数,如下所示:

  1. 获取当前日期
  2. 获取过去或未来日期
  3. 计算no之间的差异。 1而不是。 2
  4. 以下列格式显示日期
    • 如果结果是过去(2天前)或将来(2天内)
    • 格式将:天,周,月,年
  5. 我尝试了不同的方法,但无法得到我想要的结果。我发现 Android DatePicker 对话框将日期转换为整数。我还没有找到一种方法让DatePicket小部件返回日期变量而不是整数。

    private DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {
    
                public void onDateSet(DatePicker view, **int** year, 
                                      **int** monthOfYear, **int** dayOfMonth) {
                    enteredYear = year;
                    enteredMonth = monthOfYear;
                    enteredDay = dayOfMonth;
                }
            };
    

    我尝试根据上述内容将系统日期转换为Integer,但在尝试计算2个日期之间的天数时,这并不能真正起作用。

    private void getSystemDate(){
         final Calendar c = Calendar.getInstance();
    
            mYear = c.get(Calendar.YEAR);
            systemYear = mYear;
    
            mMonth = c.get(Calendar.MONTH);
            systemMonth = mMonth + 1;
    
            mDay = c.get(Calendar.DAY_OF_MONTH);
            systemDay = mDay;
    
    }
    

3 个答案:

答案 0 :(得分:15)

/** 
  *  Returns a string that describes the number of days
  *  between dateOne and dateTwo.  
  *
  */ 

public String getDateDiffString(Date dateOne, Date dateTwo)
{
    long timeOne = dateOne.getTime();
    long timeTwo = dateTwo.getTime();
    long oneDay = 1000 * 60 * 60 * 24;
    long delta = (timeTwo - timeOne) / oneDay;

    if (delta > 0) {
        return "dateTwo is " + delta + " days after dateOne";
    }
    else {
        delta *= -1;
        return "dateTwo is " + delta + " days before dateOne";
    }
}

编辑:刚刚在另一个帖子中看到了同样的问题: how to calculate difference between two dates using java

Edit2:要获得年/月/周,请执行以下操作:

int year = delta / 365;
int rest = delta % 365;
int month = rest / 30;
rest = rest % 30;
int weeks = rest / 7;
int days = rest % 7;

答案 1 :(得分:1)

long delta = Date2.getTime() - Date1.getTime();

new Date(delta);

从这里,您只需选择您的格式。也许使用日期格式化程序?至于确定未来的东西以及所有这些,你可以看看delta是正还是负。负增量将表示过去的事件。

答案 2 :(得分:1)

嗯,java / android API有你的所有答案:

    Calendar myBirthday=Calendar.getInstance();
    myBirthday.set(1980, Calendar.MARCH, 22);
    Calendar now = Calendar.getInstance();
    long diffMillis= Math.abs(now.getTimeInMillis()-myBirthday.getTimeInMillis());
    long differenceInDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS);