Java >> Java Program >  >> Java

Hur subtraherar man X dagar från ett datum med Java-kalender?

Taget från dokumenten här:

Lägger till eller subtraherar den angivna tiden till det givna kalenderfältet, baserat på kalenderns regler. Till exempel, för att subtrahera 5 dagar från den aktuella tiden i kalendern, kan du uppnå det genom att ringa:

Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -5).

Du kan använda add metoden och skicka ett negativt tal. Men du kan också skriva en enklare metod som inte använder Calendar klass som följande

public static void addDays(Date d, int days)
{
    d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}

Detta får datumets tidsstämpelvärde (millisekunder sedan epoken) och lägger till rätt antal millisekunder. Du kan skicka ett negativt heltal för parametern dagar för att göra subtraktion. Detta skulle vara enklare än den "riktiga" kalenderlösningen:

public static void addDays(Date d, int days)
{
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    c.add(Calendar.DATE, days);
    d.setTime( c.getTime().getTime() );
}

Observera att båda dessa lösningar ändrar Date objekt skickas som en parameter istället för att returnera en helt ny Date . Båda funktionerna kan enkelt ändras för att göra det åt andra hållet om så önskas.


Ansons svar kommer att fungera bra för det enkla fallet, men om du ska göra några mer komplexa datumberäkningar skulle jag rekommendera att kolla in Joda Time. Det kommer att göra ditt liv mycket enklare.

FYI i Joda Time kan du göra

DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);

Java-tagg