LÃnes93 Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 Hallo Leute, ich hab in den Foren keinen passenden Beitrag gefunden, und wende mich deshalb jetzt an euch. Ich habe von meinem Betreuer die Aufgabe gestellt bekommen, eine Reisekostenabrechnung in der Konsole zu schreiben. Die Variablen lassen sich jetzt super in die Textdatei schreiben. Die Berechnung des Betrags für jeden gefahrenen Kilometer und die Berechnung der Nebenkosten funktioniert. Jetzt habe ich allerdings das Problem das ich nicht weiß,was mein Fehler bei folgendem Code ist :confused: Ziel des Ganzen ist die Berechnung der Datumsdifferenz; (damit ich die Reisedauer herausbekomme, welche für den Verpflegungsmehraufwand gebraucht wird). Ich bitte an dieser Stelle diesen Post weiterzulesen, ich weiß nämlich nicht mehr weiter....... In dem Beispiel frage ich nach der Uhrzeit des Hinfahrttages: ... System.out.println("Geben Sie die Uhrzeit dieses Tages an:"); System.out.println("Format: XX XX"); Reisebeginn_Stunde = einlesen.nextInt(); Reisebeginn_Minute = einlesen.nextInt(); Beginn_Datum.set(Calendar.HOUR, Reisebeginn_Stunde+12); Beginn_Datum.set(Calendar.MINUTE, Reisebeginn_Minute); //Verhindern von Falscheingaben int falls_stunde = Beginn_Datum.get(Calendar.HOUR); int falls_minute = Beginn_Datum.get(Calendar.MINUTE); if(Reisebeginn_Stunde>23 && Reisebeginn_Minute==59){ System.out.println("Der Tag hat maximal 24 Stunden"); Reisebeginn_Stunde=falls_stunde; } if(Reisebeginn_Minute>59){ System.out.println("Eine Stunde hat 60 Minuten"); Reisebeginn_Minute=falls_minute; } Reisebeginn_Zeit=Beginn_Datum.get(Calendar.HOUR) +"."+Beginn_Datum.get(Calendar.MINUTE); System.out.println("Die Reise beginnt um "+Reisebeginn_Zeit+" Uhr"); Kleines Beispiel: Geben Sie die Uhrzeit dieses Tages an: Format: XX XX 12 00 Die Reise beginnt um 0.0 Uhr ============================= /////////////////////////////////////////////////////////////////////// Dazu kommt noch folgendes: Wenn ich als "Startmonat" den 12ten Monat angebe, gibt er mir folgendes aus: Geben Sie das Datum des Reisebeginns an: Format: XX XX XXXX 24 12 2010 Jahr: 2011 Monat: 0 Tag: 24 Die Reise beginnt am 24.0.2011 Hier der Code: System.out.println("Geben Sie das Datum des Reisebeginns an:"); System.out.println("Format: XX XX XXXX"); Reisebeginn_Tag = einlesen.nextInt(); Reisebeginn_Monat = einlesen.nextInt(); Reisebeginn_Jahr = einlesen.nextInt(); //KALENDER==BEGINN================================== Calendar Beginn_Datum = new GregorianCalendar(); Beginn_Datum.setTime(new Date()); //heute int c_jahr1 = Beginn_Datum.get(Calendar.YEAR); int c_monat1 =Beginn_Datum.get(Calendar.MONTH)+1; int c_tag1 = Beginn_Datum.get(Calendar.DAY_OF_MONTH); // Verhindern von Eingabefehlern if(Reisebeginn_Tag>31){ System.out.println("Es gibt maximal 31 Tage im Monat, und nicht "+Reisebeginn_Tag+" Tage"); Reisebeginn_Tag=c_tag1; } if(Reisebeginn_Monat>12){ System.out.println("Es gibt nur 12 Monate im Jahr"); Reisebeginn_Monat=c_monat1; } if(Reisebeginn_Jahr > c_jahr1){ System.out.println("Dieses Jahr wurde noch nicht erreicht....."); Reisebeginn_Jahr=c_jahr1; } Beginn_Datum.set(Calendar.DAY_OF_MONTH, Reisebeginn_Tag); Beginn_Datum.set(Calendar.MONTH, Reisebeginn_Monat); Beginn_Datum.set(Calendar.YEAR, Reisebeginn_Jahr); Reisebeginn_Datum=String.valueOf(Reisebeginn_Tag+"."+Reisebeginn_Monat +"."+Reisebeginn_Jahr); System.out.println("Jahr: " + Beginn_Datum.get(Calendar.YEAR)); System.out.println("Monat: " + Beginn_Datum.get(Calendar.MONTH)); System.out.println("Tag: " + Beginn_Datum.get(Calendar.DAY_OF_MONTH)); Reisebeginn_Datum=Beginn_Datum.get(Calendar.DAY_OF_MONTH)+"." + Beginn_Datum.get(Calendar.MONTH)+"." + Beginn_Datum.get(Calendar.YEAR); System.out.println("Die Reise beginnt am "+Reisebeginn_Datum); Was mache ich falsch? Hat das was mit dem Simpledateformat zu tun? Gruß LÃnes Zitieren
realgun Geschrieben 8. Juli 2010 Geschrieben 8. Juli 2010 Das dürfte daran liegen dass der Monat "0-basiert" ist. D.h. Januar = 0, Feb = 1,..., Dez =11 Wenn Du also eine 12 als Monat setzt, "rutscht" der Kalender in den Januar des Folgejahres. Zitieren
LÃnes93 Geschrieben 9. Juli 2010 Autor Geschrieben 9. Juli 2010 Das heißt, wenn ich zum Beispiel 11 eingebe, ist das Datum des Kalenders bei Dezember angelangt?! Denn wenn ich eingebe: 12 00 2010, bekomme ich auch den 12.0.2010 ausgegeben, bzw. beim Rest dasselbe, außer bei der 12 ^^ Ok, danke für die Antwort! Zitieren
LÃnes93 Geschrieben 9. Juli 2010 Autor Geschrieben 9. Juli 2010 Das dürfte daran liegen dass der Monat "0-basiert" ist. D.h. Januar = 0, Feb = 1,..., Dez =11 Wenn Du also eine 12 als Monat setzt, "rutscht" der Kalender in den Januar des Folgejahres. Hast du vielleicht eine Idee, weshalb das Programm bei der Uhrzeit so spinnt? Zitieren
Dragon8 Geschrieben 9. Juli 2010 Geschrieben 9. Juli 2010 Hast du vielleicht eine Idee, weshalb das Programm bei der Uhrzeit so spinnt? Wozu rechnest du denn bei den Stunden eine 12 mit drauf? Außerdem, wenn du das Datum nur ausgeben willst, würde ich mir überlegen, ob du das nicht lieber über die Klasse DateFormat machst. Wie du ja schon bemerkt hast, verwendet das Calendar Objekt intern andere Werte als du vielleicht eingegeben hast. Und wenn du dir das Datum eh nur ausgeben lassen willst, erledigt die Formatierung die Klasse DateFormat am einfachsten. Wenn du trotzdem weiterhin selber mit den Werten rumspielen willst/muss, dann verwende anstatt HOUR, lieber das Feld HOUR_OF_DAY, das dürfte dir eher die Ergebnisse liefern die du möchtest. Zitieren
LÃnes93 Geschrieben 9. Juli 2010 Autor Geschrieben 9. Juli 2010 Wozu rechnest du denn bei den Stunden eine 12 mit drauf? Als ich die +12 weggelassen hatte, ist die Ausgabe gleich 0.0Uhr gewesen, deswegen hab ich ich die draufgepackt, hab die mittlerweile wieder rausgenommen! Das Datum(die Daten ) brauche ich für die Differenz der beiden Zeitpunkte, damit ich die Reisedauer herausbekomme. Die wird ja für den Verpflegungsmehraufwand gebraucht. Wie ich an die Differenz rankomme, weiß ich schon; hängt jetzt wirklich nur noch an der Uhrzeit bzw. am Monat "12" ^^ HOUR_OF_DAY; probier ich direkt mal aus, danke Zitieren
disaster_02 Geschrieben 26. Juli 2010 Geschrieben 26. Juli 2010 (bearbeitet) Hast du vielleicht eine Idee, weshalb das Programm bei der Uhrzeit so spinnt? Ich weiß nicht ganz genau, was dein Problem mit der Uhrzeit ist, aber wenn du dir eine Calendar-Instanz per getInstance() holst, hat diese als Datum UND UHRZEIT das aktuelle Datum. Wenn du beispielsweise nur mit dem Datum arbeiten möchtest, solltest du darauf achten, dass Stunden, Minuten, Sekunden und Millisekunden auf 0 gesetzt sind. Sonst stehen dort eben die Daten des Zeitpunktes des getInstance()-Aufrufs drin. //Edit: Entschuldigt bitte, war evtl. schon ein bisschen zu alt, um darauf zu antworten. Vielleicht hilft's ja dennoch dem einen oder anderen, weil man gerade, wenn man eigentlich nur mit den Datumswerten arbeiten möchte, schell mal vergisst, dass bei Vergleichen o.ä. auch die Uhrzeit (inkl. Millisekunden) zu beachten ist. Bearbeitet 26. Juli 2010 von disaster_02 Zitieren
vince-blacky Geschrieben 27. Juli 2010 Geschrieben 27. Juli 2010 Hast du vielleicht eine Idee, weshalb das Programm bei der Uhrzeit so spinnt? Probier es doch so: Zunächst musst Du Objekte von der Klasse DateFormat (z.B. df), TimeDiff (z.B. td), GregorianCalender (2 Zeiten=2Objekte z.B. time1 u. time2) erzeugen. Dann die Methode "TimeDiff.getInstance(time1, time2)" anwenden. Zuletzt kannst Du die Differenz aufrufen mit z.B.: System.out.println(" " + td.hours + " Stunden " + td.minutes + " Minuten " + td.seconds + " Sekunden"); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.