Date-Objekt um einen Monat "erhöhen"

Status
Nicht offen für weitere Antworten.

Hobbes

Aktives Mitglied
Hallo allerseits,

ich habe ein Date-Objekt (ja, ich weiß, dass es veraltet ist. Aber ich habe es trotzdem ;)) Ich brauche jetzt ein weiteres Date-Objekt, das einen Monat später ist.

Solange das Datum in der Mitte des Monats ist (z.B. 18.3.2008) ist es kein Problem. Da würde ich ein Calendar-Objekt erstellen, dort die Änderung durchführen und anschließend wieder ein Date-Objekt erstellen.

Nun kommt aber das Problem, dass nicht jeder Monat mehr als 28 Tage hat. Wenn also der Tag größer als 28 ist, möchte ich den Monatsletzten des nächsten Monats erhalten. Beispiel: ich habe den 30.9.2008 und möchte als Ergebnis den 31.10.2008 bekommen. Der nächste Monatsletzte wäre der 30.11.2008.

Mit aufwändigen Abfragen würde mir das möglicherweise gelingen. Aber gibt es auch eine vergleichsweise einfache Möglichkeit?

Java:
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class AdjustDate {
	public static void main(String args[]) {
		Date dt = new Date();
		Date dt2 = AdjustDate.addOneMonth(dt);
		System.out.println(dt2);
	}

	public static Date addOneMonth(Date dt) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(dt);
		if (cal.get(Calendar.DAY_OF_MONTH) <= 28) {
			cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
		} else {
			// setze auf den Monatsletzten des nächsten Monats
		}
		return cal.getTime();
	}
}

Stunden und Minuten sind übrigens egal. Die sind bei mir alle auf 0 gesetzt. Mich interessiert also lediglich das Datum.

Gruß
Hobbes
 

miwoe

Mitglied
Hab mal nach einer Klasse DateUtils gegoogelt und das gefunden:

Koders Code Search: DateUtil.java - Java

Kann man sich aber alles selbst gut selbst zusammenbasteln. So eine Aufwändige Abfrage ist es gar nicht. Für deinen Fall würde eine while-Schleife, eine temporäre Variable und ein if vermutlich reichen.
 

Hobbes

Aktives Mitglied
Danke, das werde ich mir in den nächsten Tagen mal in Ruhe anschauen. Wenn ich Fragen habe, melde ich mich nochmal :)
 

André Uhres

Top Contributor
Versuch's mal so:
Java:
public static Date addOneMonth(Date dt) {
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(dt);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}
GregorianCalendar#add(..) macht nämlich genau das, was du brauchst :D
 
Zuletzt bearbeitet:

Hobbes

Aktives Mitglied
Danke, darauf kann ich aufbauen :) Aber es macht nur fast das, was ich brauche. Wenn ich zum 31.8. einen Monat addiere, komme ich korrekterweise zum 30.9. Aber wenn ich dann noch einen Monat addiere, komme ich zum 30.10. Ich möchte aber zum 31.10. (wieder den Monatsletzten)

Gibt es eine Konstante für die Anzahl der Tage in einem Monat? Oder muss ich mir das selbst in einem Array anlegen?
 
S

SlaterB

Gast
zwei Stichworte: DAY_OF_MONTH + getMaximum/ getActualMaximum,
nun ruhig auch mal die Anleitung lesen (z.B. API)

GregorianCalendar (Java Platform SE 6)

noch ein anderer Trick:
auf Monatsersten setzen (wieder mit DAY_OF_MONTH), + 1 oder 2 Monate, -1 Tage
 

André Uhres

Top Contributor
Wenn ich zum 31.8. einen Monat addiere, komme ich korrekterweise zum 30.9. Aber wenn ich dann noch einen Monat addiere, komme ich zum 30.10. Ich möchte aber zum 31.10. (wieder den Monatsletzten)
So müsste es klappen:
Java:
public static Date addOneMonth(Date dt) {
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(dt);
    boolean max = cal.get(Calendar.DAY_OF_MONTH) == cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    cal.add(Calendar.MONTH, 1);
    if(max){
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    }
    return cal.getTime();
}
 

Hobbes

Aktives Mitglied
Alles klar. Vielen Dank :)

@SlaterB

Bislang habe ich immer nur die Doku zur Klasse Calendar gelesen. Auf die Idee, dass GregorianCalendar noch zusätzliche Funktionen bietet, bin ich ehrlich gesagt gar nicht gekommen. Aber für die Zukunft weiß ich es :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Datum und Uhrzeit als Date Objekt Java Basics - Anfänger-Themen 10
S Erste Schritte Berechnung mit Daten aus CSV und Date Objekt Java Basics - Anfänger-Themen 2
K konvertiere Millisekunden in ein Utc Date Objekt Java Basics - Anfänger-Themen 5
M Datentypen Wie initialisiere ich ein Objekt vom Typ Date? Java Basics - Anfänger-Themen 3
J Date-Objekt formatiert als String ausgeben Java Basics - Anfänger-Themen 2
G Date Objekt für aktuelles Datum erzeugen Java Basics - Anfänger-Themen 9
M aus string date objekt machen? Java Basics - Anfänger-Themen 3
G Aus verschiedenen Formaten ein Date-Objekt machen Java Basics - Anfänger-Themen 3
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
MiMa Date vs LocalDate/LocalDateTime Java Basics - Anfänger-Themen 13
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
M Umgang mit dem Type "Date" Java Basics - Anfänger-Themen 6
sserio Date Library Frage Java Basics - Anfänger-Themen 9
P "Datestamp" to Date oder Timestamp Java Basics - Anfänger-Themen 15
B Date - Vergleich (equals / after) ? Java Basics - Anfänger-Themen 3
G convert Date to LocalDate Java Basics - Anfänger-Themen 11
G convert Optional<Date> into Optional<LocalDate> Java Basics - Anfänger-Themen 6
J Methoden toString()-Date Formatter Java Basics - Anfänger-Themen 8
L Java Date Format ändern Java Basics - Anfänger-Themen 5
B java.util.Date noch zeitgemäß? Java Basics - Anfänger-Themen 6
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
B Date - Umwandlung OffsetDateTime Java Basics - Anfänger-Themen 11
B Date Konvertierung Java Basics - Anfänger-Themen 0
B Date formatieren Java Basics - Anfänger-Themen 13
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
Thallius Date für DatePicker formatieren aber wie? Java Basics - Anfänger-Themen 9
A Vererbungshierachie und java.util.Date Java Basics - Anfänger-Themen 31
agent47 Java 8 Locale Date Time Java Basics - Anfänger-Themen 2
S String zu Date Java Basics - Anfänger-Themen 6
L Java String to date? Java Basics - Anfänger-Themen 2
H Repräsentation von DateTime (Joda) in Java Util Date überführen Java Basics - Anfänger-Themen 3
I Date zu 01.01.<year> setzen Java Basics - Anfänger-Themen 1
H java date-time parser Java Basics - Anfänger-Themen 1
S Date parsen klappt nicht richtig Java Basics - Anfänger-Themen 3
A String to Date parsing Java Basics - Anfänger-Themen 2
M TimeUnit ms nach date convertieren Java Basics - Anfänger-Themen 2
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
K Best Practice Date in einem Konstruktor angeben Java Basics - Anfänger-Themen 5
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
N Change date Format Java Basics - Anfänger-Themen 2
P Date oder Kalender? Was soll man verwenden? Java Basics - Anfänger-Themen 2
M Simple Date Format Java Basics - Anfänger-Themen 2
D Java Date/Calendar Problem Java Basics - Anfänger-Themen 4
Kenan89 Java Date List Java Basics - Anfänger-Themen 4
L Date differenz Java Basics - Anfänger-Themen 6
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
B Datentypen Date Java Basics - Anfänger-Themen 11
G Date - Calender | "Vergleich" Java Basics - Anfänger-Themen 3
M Mal wieder Probleme mit Date Java Basics - Anfänger-Themen 9
A Datentypen Datum mit "May" zu Date parsen Java Basics - Anfänger-Themen 6
Blindxantos Datentypen Probleme bei util.Date zu sql.Date Java Basics - Anfänger-Themen 5
R Tage subtrahieren von einem Date() Java Basics - Anfänger-Themen 6
I Date um 1 Jahr erhöhen? Java Basics - Anfänger-Themen 17
F GMT für Date Objekte festlegen Java Basics - Anfänger-Themen 5
F Sekunden abschneiden bei Date Java Basics - Anfänger-Themen 4
L int TimeZone für Date Java Basics - Anfänger-Themen 3
N alter mit Date ausrechnen Java Basics - Anfänger-Themen 10
turmaline String zu Date konvertieren -> Unparseable date Java Basics - Anfänger-Themen 5
T java.util.Date Java Basics - Anfänger-Themen 5
C Date() ->das Datum von gestern ausgeben Java Basics - Anfänger-Themen 11
H OOP java.sql.Date does not have a no-arg default constructor Java Basics - Anfänger-Themen 2
L Date subtrahieren? Java Basics - Anfänger-Themen 10
G Date von heute mit Uhrzeit erzeugen Java Basics - Anfänger-Themen 9
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
I Null - Wert bei Date (Mysql) Java Basics - Anfänger-Themen 2
A The method getYear() from the type Date is deprecated Java Basics - Anfänger-Themen 6
P Datum: String in Date umwandeln Java Basics - Anfänger-Themen 7
T mit Typen Date rechnen Java Basics - Anfänger-Themen 6
F java.sql.Date Differenz Java Basics - Anfänger-Themen 3
P Date geht auf UNIX 1 Stunde nach Java Basics - Anfänger-Themen 14
M Date-Problem Java Basics - Anfänger-Themen 3
H Einfaches Date-parse problem Java Basics - Anfänger-Themen 2
Developer_X Date Java Basics - Anfänger-Themen 4
Antoras Daten aus Date lesen Java Basics - Anfänger-Themen 3
G String in Date konvertieren Java Basics - Anfänger-Themen 6
W 2 Date()-Daten vergleichen Java Basics - Anfänger-Themen 6
W String in Date Java Basics - Anfänger-Themen 4
G SpinnerDateModel stard & end nur Date? Java Basics - Anfänger-Themen 4
H Date-Object "um eins erhöhen! Java Basics - Anfänger-Themen 4
G Anfänger: Problem mit Date Java Basics - Anfänger-Themen 3
S NullPointerException bei Date.setTime() Java Basics - Anfänger-Themen 3
M 2 Date()-Datum´s vergleichen Java Basics - Anfänger-Themen 9
C Java 7 Date Java Basics - Anfänger-Themen 9
L Timer und Date Java Basics - Anfänger-Themen 2
G SQL Date zu JAVA Date Java Basics - Anfänger-Themen 4
G String in Date casten. Java Basics - Anfänger-Themen 7
G String in Date casten Java Basics - Anfänger-Themen 4
G java.text.parseException: Unparseable Date Java Basics - Anfänger-Themen 7
U java.util.Date to java.sql.Date Java Basics - Anfänger-Themen 2
B JSpinner/Date auslesen Java Basics - Anfänger-Themen 3
S Datum umwandeln: String in Date umwandeln Java Basics - Anfänger-Themen 4
F date und time berechnungen Java Basics - Anfänger-Themen 2
G Formatieren von Date-Objekten Java Basics - Anfänger-Themen 5
G Objekte vom Typ Date vergleichen Java Basics - Anfänger-Themen 2
P JAVA in Exe Date ausführen Java Basics - Anfänger-Themen 7
B string 2 sql.date() Java Basics - Anfänger-Themen 8
G date in sekunden umwandeln und wieder zurück. Java Basics - Anfänger-Themen 6
A einlesen von date und boolean Java Basics - Anfänger-Themen 3
G String in java.sql.Date umwandeln Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben