Zum Inhalt springen

Datumsdifferenz in meiner Reisekostenabrechnung


Línes93

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...
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 von disaster_02
Link zu diesem Kommentar
Auf anderen Seiten teilen

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");

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...