7

下面是我用来访问过去 10 天前的日期的代码。输出为“20130103”,即今天的日期。我怎样才能返回今天的日期 - 10 天?我仅限于使用内置的 java 日期类,所以不能使用 joda 时间。

package past.date;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class PastDate {

    public static void main(String args[]){

        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        Date myDate = new Date(System.currentTimeMillis());
        Date oneDayBefore = new Date(myDate.getTime() - 10);    
        String dateStr = dateFormat.format(oneDayBefore);      
        System.out.println("result is "+dateStr);

    }

}
4

6 回答 6

15

您可以使用Calendar's 方法操作日期。

DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date myDate = new Date(System.currentTimeMillis());
System.out.println("result is "+ dateFormat.format(myDate));
Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
cal.add(Calendar.DATE, -10);
System.out.println(dateFormat.format(cal.getTime()));
于 2013-01-03T14:25:26.253 回答
6

这条线

Date oneDayBefore = new Date(myDate.getTime() - 10);    

将日期设置为 10 毫秒,而不是 10 天。最简单的解决方案是减去 10 天内的毫秒数:

Date tenDaysBefore = new Date(myDate.getTime() - (10 * 24 * 60 * 60 * 1000));    
于 2013-01-03T14:24:53.103 回答
3

使用Calendar.add(Calendar.DAY_OF_MONTH, -10).

于 2013-01-03T14:34:30.273 回答
2

Date 类表示特定的时间瞬间,精度为毫秒。

Date oneDayBefore = new Date(myDate.getTime() - 10); 

所以这里你只减去 10 毫秒,但是你需要减去 10 天乘以 10 * 24 * 60 * 60 * 1000

于 2013-01-03T14:24:31.557 回答
2

你也可以这样做:

Date tenDaysBefore = DateUtils.addDays(new Date(), -10);
于 2020-02-28T14:06:19.763 回答
1
Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);
cal.add(Calendar.DAY_OF_MONTH, -30);
Date today30 = cal.getTime();
System.out.println(today30);
于 2015-08-18T12:57:41.893 回答