15

我假设 Java 有一些内置的方法可以做到这一点。

给定一个日期,我如何确定该日期前一天的日期?

例如,假设给我 2009 年 3 月 1 日。上一个日期是 2009 年 2 月 28 日。如果给我的是 2008 年 3 月 1 日,那么之前的日期应该是 2008 年 2 月 29 日。

4

7 回答 7

47

使用日历界面。

Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
cal.add(Calendar.DAY_OF_YEAR,-1);
Date oneDayBefore= cal.getTime();

以这种方式进行“添加”可确保您获得有效日期。这也适用于一年中的第一天,例如,如果myDate是 2012 年 1 月 1 日,oneDayBefore则将是 2011 年 12 月 31 日。

于 2009-04-13T21:18:05.900 回答
8

您还可以使用Joda-Time,这是一个非常好的 Java 库来操作日期:

DateTime result = dt.minusDays(1);
于 2009-04-13T21:30:21.503 回答
4

java.util.Calendar 类允许我们从日期中添加或减去任意数量的天/周/月/任意数量。只需使用 add() 方法:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html

例子:

Calendar date = new GregorianCalendar(2009, 3, 1);
date.add(Calendar.DATE, -1);
于 2009-04-13T21:21:29.777 回答
4

使用 java.time.Instant

Date.from(Instant.now().minus(Duration.ofDays(1)))
于 2018-04-27T09:33:07.810 回答
1
import java.util.Calendar;
import java.util.GregorianCalendar;
import static java.util.Calendar.*;


public class TestDayBefore {

    public static void main(String... args) {
        Calendar calendar = GregorianCalendar.getInstance();
        calendar.set(YEAR, 2009);
        calendar.set(MONTH, MARCH);
        calendar.set(DAY_OF_MONTH, 1);
        System.out.println(calendar.getTime()); //prints Sun Mar 01 23:20:20 EET 2009
        calendar.add(DAY_OF_MONTH, -1);
        System.out.println(calendar.getTime()); //prints Sat Feb 28 23:21:01 EET 2009

    }
}
于 2009-04-13T21:21:52.413 回答
1

使用date4j库:

DateTime yesterday = today.minusDays(1);
于 2011-02-13T02:04:24.937 回答
1

这会有所帮助。

getPreviousDateForGivenDate("2015-01-19", 10);
getPreviousDateForGivenDate("2015-01-19", -10);

public static String getPreviousDateForGivenDate(String givenDate, int datesPriorOrAfter) {
    String saleDate = getPreviousDate(datesPriorOrAfter);

    try {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String[] arr = givenDate.split("-", 3);
        Calendar cal = new GregorianCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1])-1, Integer.parseInt(arr[2]));
        cal.add(Calendar.DAY_OF_YEAR, datesPriorOrAfter);    
        saleDate = dateFormat.format(cal.getTime());

    } catch (Exception e) {
        System.out.println("Error at getPreviousDateForGivenDate():"+e.getMessage());
    }

    return saleDate;
}
于 2015-03-21T02:20:06.783 回答