Ich habe einen Datumstyp java.util.Date
Davon möchte ich drei Monate abziehen.
Finde nicht viel Freude an der API.
AJM
Ich habe einen Datumstyp java.util.Date
Davon möchte ich drei Monate abziehen.
Finde nicht viel Freude an der API.
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
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 SimpleDateFormat
oder allgemeine Veränderlichkeit).
z.B
DateTime result = dt.minusMonths(3);
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));
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.
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;)
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