it-swarm.com.de

Wie kann man X-Tag von einem Date-Objekt in Java abziehen?

Ich möchte etwas tun wie:

Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"

Wie es geht? 

98
yetAnotherSE

Java 8 und höher

Bei der Änderung der Datumszeit-API von Java 8 verwenden Sie LocalDate

LocalDate date = LocalDate.now().minusDays(300);

Java 7 und früher

Verwenden Sie die Calendar 's add() Methode

Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -30);
Date dateBefore30Days = cal.getTime();
209
Jigar Joshi

@JigarJoshi ist die gute Antwort, und natürlich auch @Tim-Empfehlung, . joda-time zu verwenden. 

Ich möchte nur weitere Möglichkeiten hinzufügen, um Tage von einem Java.util.Date abzuziehen.

Apache-Commons

Eine Möglichkeit ist die Verwendung von Apache-commons-lang . Sie können dies mit DateUtils wie folgt tun:

Date dateBefore30Days = DateUtils.addDays(new Date(),-30);

Natürlich fügen Sie die commons-lang-Abhängigkeit hinzu, um nur das Datum zu subtrahieren. Es ist wahrscheinlich keine gute Option. Wenn Sie jedoch commons-lang bereits verwenden, ist dies eine gute Wahl. Es gibt auch praktische Methoden für addYears, addMonths, addWeeks und so weiter. Schauen Sie sich die api hier an .

Java 8

Eine andere Möglichkeit besteht darin, die neue LocalDate von Java 8 mithilfe der minusDays(long days) -Methode zu nutzen:

LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30);
28
albciff

Ich würde Ihnen wirklich empfehlen, die DateTime-Bibliothek zu verwenden, die Sie hier finden: https://www.joda.org/joda-time/

Dies ist eine meiner ersten Abhängigkeiten, die ich zu fast jedem einzelnen Java-Projekt hinzufüge.

Wenn Sie einen älteren Code haben, der Datumsangaben oder Kalender erfordert, können Sie ihn aus DateTimes zurück konvertieren.

Das Abziehen von 300 Tagen wäre also so einfach wie:

Date date = new Date(); // Or where ever you get it from
Date daysAgo = new DateTime(date).minusDays(300).toDate();
27
Tim

Java 8 Time API:

Instant now = Instant.now(); //current date
Instant before = now.minus(Duration.ofDays(300));
Date dateBefore = Date.from(before);
11
GKislin

Mit Java 8 ist es jetzt ganz einfach:

 LocalDate date = LocalDate.now().minusDays(300);

Eine großartige Anleitung zur neuen API finden Sie hier .

10

Wie Sie sehen, HIER können Sie viele Manipulationen durchführen. Hier ein Beispiel, was Sie tun können!

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();

//Add one day to current date.
cal.add(Calendar.DATE, 1);
System.out.println(dateFormat.format(cal.getTime()));

//Substract one day to current date.
cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(dateFormat.format(cal.getTime()));

/* Can be Calendar.DATE or
*  Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND
*/
6
waldyr.ar

Mit SimpleDateFormat können Sie den Kalender ganz einfach abziehen

 public static String subtractDate(String time,int subtractDay) throws ParseException {


        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
        cal.setTime(sdf.parse(time));
        cal.add(Calendar.DATE,-subtractDay);
        String wantedDate = sdf.format(cal.getTime());

        Log.d("tag",wantedDate);
        return wantedDate;

    }
0
Beyaz

Ich habe eine Funktion erstellt, um die Aufgabe zu erleichtern.

  • Für 7 Tage nach dateString: dateCalculate(dateString,"yyyy-MM-dd",7);

  • So erhalten Sie 7 Tage auf dem neuesten StandString: dateCalculate(dateString,"yyyy-MM-dd",-7);


public static String dateCalculate(String dateString, String dateFormat, int days) {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat s = new SimpleDateFormat(dateFormat);
    try {
        cal.setTime(s.parse(dateString));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    cal.add(Calendar.DATE, days);
    return s.format(cal.getTime());
}
0
reflexgravity