Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hoffe mir kann jemand helfen. Drehe nämlich langsam durch. Also: Ich habe 2 Datums, Datümer, Daten wie auch immer das heißen mag. Diese will ich miteinander vergleichen. Das eine Datum hole ich mir als String aus einer Datei in der Form "20080315" (Also z.B. 15.3.2008). Das andere Datum soll das aktuelle sein. Jetzt möchte ich diese beiden so miteinander vergleichen, um dann zu wissen ob zwischen dem alten und dem aktuellen Datum mehr als 7 tage liegen. Ich bekomme es aber einfach nicht hin
Mein Code etwas vereinfacht:
Code:
Calendar heute = new GregorianCalendar();
// Beispielhaft mal irgendein vergangenes Datum
String lastUpdate = "20080315"
int day = Integer.parseInt(lastUpdate.substring(6, 8));
int month = Integer.parseInt(lastUpdate.substring(4, 6));
int year = Integer.parseInt(lastUpdate.substring(0, 4));
Calendar neulich = new GregorianCalendar(day, month, year, 0,0,0);
neulich.add(Calendar.DAY_OF_MONTH, 7);
if (neulich.after(heute)){
return false;
}
bin ich da auf dem richtigen Weg. Bekomme egal ob, der zeitraum größer oder kleiner als 7 tage ist einfach immer das selbe ergebnis :bahnhof:
Vielen dank erstmal für deine Hilfe und deine guten Tipps. Habe jetzt weiter mal ein wenig rumprobiert und einiges abgeändert. Damit läuft es somit jetzt auch erstmal:
Code:
Calendar heute = new GregorianCalendar();
// Beispielhaft mal irgendein vergangenes Datum
String lastUpdate = "20080315"
int day = Integer.parseInt(lastUpdate.substring(6, 8));
int month = Integer.parseInt(lastUpdate.substring(4, 6));
int year = Integer.parseInt(lastUpdate.substring(0, 4));
Calendar neulich = new GregorianCalendar(year, month-1, day, 0,0,0);
neulich.add(Calendar.DAY_OF_MONTH, 7);
if (neulich.after(heute)){
return false;
}
Mich wundert es aber warum ich bei dem monat eins abziehen muss. in der int variable month steckt eine 3. Wenn ich die -1 aber weglasse, dann bekomme ich den vierten Monat? kann ich das mit minus eins so machen, oder könnte es dadurch später zu Problemen kommen?
etwas einfacherer:
String lastUpdate = "20080315";
SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
Date date = f.parse(lastUpdate);
Damit habe ich auch schon ein wenig rumprobiert. Habe es aber nicht hinbekommen bei dem Datum sieben Tage drauf zu rechnen. Gibt es da auch eine Möglichkeit?
> Habe es aber nicht hinbekommen bei dem Datum sieben Tage drauf zu rechnen.
das Date musst du auch in einen Calendar stecken + dort rechnen,
da gibts dann aber ne einfache set-Operation, besser als mit Monaten zu hantieren
das mit den Monaten siehst du so richtig, nix schöner zu machen, soweit ich weiß,
Monat wird intern als 0-11 abgespeichert, vielleicht aus irgendwelchen historischen Gründen,
auf jeden Fall günstig, wenn man ein Array für die 12 Monate als String hat,
dann muss man dort nicht mehr -1 rechnen
SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
Date date = f.parse(lastUpdate);
GregorianCalendar neulich = new GregorianCalendar();
neulich.setTime(date);
neulich.add(Calendar.DAY_OF_MONTH, 7);
Oder du verwendest die dafür vorgesehenen Konstanten, z.B. Calendar.MARCH - mache ich jetzt immer so, nachdem ich da auch mal ein paar zehn Minuten mit vertan habe.
Sag was du willst, ich bleibe dabei und finde die kompletten Datum-Sachen in Java von Sun sind einfach voellig vermurkst. Wenn man einen Monat mit Zahlen zwischen 0 und 11 angeben muss, ist das einfach nur extrem strange (Vom Sinn und Zweck des GregorianCalendar fang ich jetzt mal gar nicht an zu schreiben).
Noch schlimmer als einem Java Beginner zu erklaeren, warum:
Code:
double foo = 5/12;
System.out.println(foo);
0.0 ergibt. :autsch:
Aber wie gesagt, Joda Time hilft (jedenfalls beim Kalender). Irgendwo meine ich auch gelesen zu haben, das Joda evtl. vllt. mal ins JDK reinrutscht... *freu*.