5

我得到今天的日期是这样的:

final Calendar cal = Calendar.getInstance();
{
   mYear = cal.get(Calendar.YEAR);
   mMonth = cal.get(Calendar.MONTH);
   mDay = cal.get(Calendar.DAY_OF_MONTH);
}

我想计算 x 天前的日期是什么……有人得到了什么吗?

4

4 回答 4

12

更好的方法是使用add方法而不是set

cal.add(DAY_OF_YEAR, -2);

即确保它也在每月的第一天等工作。

于 2011-10-07T20:42:47.243 回答
3

您可以执行以下操作:

    Calendar cal=Calendar.getInstance();
    int currentDay=cal.get(Calendar.DAY_OF_MONTH);
    //Set the date to 2 days ago
    cal.set(Calendar.DAY_OF_MONTH, currentDay-2);

然后你可以得到日期:

    cal.getTime(); //The date 2 days ago
于 2011-10-07T14:02:26.113 回答
3

我使用以下功能:

public static Date getStartOfDay() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

public static long getDaysAgo(Date date){
    final long diff = getStartOfDay().getTime() - date.getTime();
    if(diff < 0){
    // if the input date millisecond > today's 12:00am millisecond it is today
    // (this won't work if you input tomorrow)
        return 0;
    }else{ 
        return TimeUnit.MILLISECONDS.toDays(diff)+1;
    }
}
于 2015-05-15T21:05:34.720 回答
1

相同类型的代码,但使用Joda-Time 2.3 库和 Java 7。

DateTime dateTime = new DateTime( 2014, 2, 3, 7, 8, 9 );
DateTime twoDaysPrior = dateTime.minusDays( 2 );
dateTime: 2014-02-03T07:08:09.000-08:00
twoDaysPrior: 2014-02-01T07:08:09.000-08:00
于 2014-01-06T18:05:04.083 回答