Как определить дату за день до заданной даты в Java? - PullRequest
15 голосов
/ 14 апреля 2009

Я предполагаю, что в Java есть какой-то встроенный способ сделать это.

Учитывая дату, как я могу определить дату за день до этой даты?

Например, предположим, мне дано 01.03.2009. Предыдущая дата - 28.02.2009. Если бы мне дали 3/1/2008, предыдущая дата была бы 2/29/2008.

Ответы [ 7 ]

46 голосов
/ 14 апреля 2009

Использовать интерфейс календаря.

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

Выполнение «сложения» таким образом гарантирует, что вы получите правильную дату. Это относится и к 1-му году обучения, например, если myDate 1 января 2012 года, oneDayBefore будет 31 декабря 2011 года.

8 голосов
/ 14 апреля 2009

Вы также можете использовать Joda-Time , очень хорошую библиотеку Java для манипулирования датами:

DateTime result = dt.minusDays(1);
3 голосов
/ 14 апреля 2009

Класс 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);
2 голосов
/ 27 апреля 2018

С java.time.Instant

Date.from(Instant.now().minus(Duration.ofDays(1)))
1 голос
/ 21 марта 2015

Это помогло бы.

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;
}
1 голос
/ 13 февраля 2011

С библиотекой date4j :

DateTime yesterday = today.minusDays(1);
1 голос
/ 14 апреля 2009
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

    }
}
...