java.util.Date – Drei Monate von einem Datum löschen?

Lesezeit: 3 Minuten

Benutzer-Avatar
AJM

Ich habe einen Datumstyp java.util.Date

Davon möchte ich drei Monate abziehen.

Finde nicht viel Freude an der API.

  • Sie werden mit Javas Date/Time-API nicht viel Freude haben, weil es eines der schlechtesten im JDK ist (Performance, Threading, unlogisch, …). Ich empfehle Joda Time als Ersatz. Diese Bibliothek beeinflusst stark das neue Datum/Uhrzeit-JSR-310, das entweder in Java 7 oder höher zu Java hinzugefügt wird.

    – Steve D

    21. August 2009 um 10:34 Uhr

Benutzer-Avatar
Daniel Rikowski

Hier ist die Ebene JDK Version benötigt es die Calendar Klasse als Helfer:

Date referenceDate = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(referenceDate); 
c.add(Calendar.MONTH, -3);
return c.getTime();

Aber Sie sollten ernsthaft in Betracht ziehen, die zu verwenden Joda-Bibliothekwegen verschiedener Mängel der Date und Calendar Klassen. Mit Joda können Sie Folgendes tun:

new DateTime().minusMonths(3).toDate();

Oder wenn Sie von einem bestimmten Datum anstelle des aktuellen subtrahieren möchten:

new DateTime(referenceDate).minusMonths(3).toDate();

Aktualisierung für Java 8: Mit Java 8 können Sie auch die neue JSR 310-API verwenden (die von Joda inspiriert ist):

LocalDateTime.from(referenceDate.toInstant()).minusMonths(3);

  • +1 für Joda. Es war sehr einfach, einen Vergleich sogar mit java.util.Date durchzuführen.

    – Ravindranath Akila

    10. Juni 2014 um 6:48 Uhr

Benutzer-Avatar
ersterDaumen

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);

Stellen Sie Ihr Datum mit ein setTime Methode.

  • “Stellen Sie Ihr Datum mit der setTime-Methode ein” – und in diesem einfachen Satz ist die Zusammenfassung all dessen, was mit java.util.Date nicht stimmt 🙂

    – Brian Agnew

    21. August 2009 um 11:26 Uhr

  • @Firstthumb: Das wichtigste Problem ist, dass Date nicht unveränderlich ist. Der Setter zeigt dieses Problem. Aber im Gegensatz zu Brians Kommentar gibt es andere Probleme. Auf der Joda-Website finden Sie einige Erklärungen dazu, warum sie die Joda-Bibliothek erstellt haben.

    – Daniel Rikowski

    21. August 2009 um 12:11 Uhr

  • java.util.Date ist Standard für Java. Sie haben Recht. Seine Leistung ist nicht gut. Aber ich bestehe darauf, dass meine Antwort eine der Lösungen für die Frage von AJM ist

    – erster Daumen

    21. August 2009 um 12:19 Uhr

Verwenden Java 8 du kannst es so machen,

Date d = Date.from(LocalDate.now().minusMonths(3).atStartOfDay(ZoneId.systemDefault()).toInstant());

Das LocalDate Die Klasse verfügt über viele Methoden, mit denen Sie einfache Berechnungen zu Daten wie den obigen durchführen können.

// Add 2 months
Date d = Date.from(LocalDate.now().plusMonths(2).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Add 5 days
Date d = Date.from(LocalDate.now().plusDays(5).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Minus 1 day and 1 year
Date d = Date.from(LocalDate.now().minusYears(1).minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());

Um die Zeit zu berechnen, können Sie die verwenden LocalDateTime Klasse,

// Minus 1 year, minus 1 days, plus 1 hour
Date d = Date.from(LocalDateTime.now().minusYears(1).minusDays(1).plusHours(1).toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant());

ich stets empfehlen Joda für so was. Es hat eine viel schönere API und leidet nicht unter Threading-Problemen, die das Standard-Java-Datum/Uhrzeit hat (z. B. Probleme mit SimpleDateFormatoder allgemeine Veränderlichkeit).

z.B

DateTime result = dt.minusMonths(3);

Benutzer-Avatar
Patrik Bego

Ok, mit java.sql.Date (Unterklasse von java.util.Date) und JDKs 8 LocalDate-Hilfe können Sie es in einer Zeile tun;)

Date date = java.sql.Date.valueOf(LocalDate.now().minus(3, ChronoUnit.MONTHS));

Benutzer-Avatar
Alle

Die Date-Klasse allein reicht nicht aus (+: Sie müssen hier die Calendar-Klasse verwenden

Etwas in diese Richtung

GregorianCalendar lCalendar = new GregorianCalendar();
lCalendar.setTime( aDate );
lCalendar.add(Calendar.MONTH, -3);

ps Das obige Snippet wurde nicht auf Kompilierung getestet.

Benutzer-Avatar
Valentin Montmirail

Sie möchten heute – 3 Monate im Format TT MMMM JJJJ

     SimpleDateFormat format = new SimpleDateFormat("dd MMMM yyyy");

     Calendar c = Calendar.getInstance(); 
     c.setTime(new Date()); 
     c.add(Calendar.MONTH, -3);

     Date d = c.getTime();
     String res = format.format(d);

     System.out.println(res);

Dieser Code kann also die Arbeit erledigen;)

1381720cookie-checkjava.util.Date – Drei Monate von einem Datum löschen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy