Reisezeiten ermitteln

andi_j62

Mitglied
Hallo Zusammen,

ich habe ein kleines Problem und weiss momentan nicht wie ich es lösen kann....

Für eine Reisekostenabrechnung habe ich das Startdatum mit Uhrzeit und das Enddatum mit Uhrzeit zur Verfügung. Jetzt gibt es 3 verschiedene Zeitblöcke, die immer auf 24:00 gerechnet werden müssen und zwar 24h, 14h und 8h. Immer wenn einer dieser 3 Zeitblöcke erreicht wird muss der jeweilige Bereichszähler um 1 erhöht werden.

Beispiel 1:
Startdatum 01.07.2010 16 Uhr
Enddatum 03.07.2010 14 Uhr

Das Ergebnis müsste jetzt sein:
1 x 8Std (16 Uhr - 24 Uhr)
1 x 24Std (24 Uhr - 24 Uhr)
1 x 14 Std (24 Uhr - 14 Uhr)

Beispiel 2:
Startdatum: 01.10.2010 16 Uhr
Enddatum: 02.10.2010 14 Uhr

Das Ergebnis müsste jetzt sein:
1 x 8 Std (16 Uhr - 24 Uhr)
1 x 14 Std (24 Uhr - 14 Uhr)

Ich hoffe ich konnte es erklären.

Wäre super wenn mir hier jemand mit einer Routine auf die Sprünge helfen könnte!

Viele Grüße
Andi
 

Ruzmanz

Top Contributor
Ich habe wohl deinen Ansatz überlesen ... Mache dir doch erstmal alle Methoden, die du brauchst:

Code:
- blockzaehler : int[3]
- startDatum : String
- endDatum: String

+ getStartTag() : int
+ getStartMonat() : int
+ getStartJahr() : int
+ getStartStunde() : int

+ getEndTag() : int
+ getEndMonat() : int
+ getEndJahr() : int
+ getEndStunde() : int

+ getAnzahlTage() : int
+ getStunden(tag: int) : int

+ ausgeben() : void

Wegen deinen mangehaften Informationen, weis ich nicht, was du alles brauchst/hast. Ich gehe mal davon aus, dass das Datum im Stringformat vorliegt. Dann kannst du mit der Methode substring und parseInt alles erledigen.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Mit welchen Klassen arbeitest Du? java.util.Calendar bietet Möglichkeiten einzelne Informationen aus einem Datum auszulesen. Sind die Bereich fest? Was ist wenn ein Termin um 15 Uhr anfängt/endet, zählt das dann zum 14h/24h Bereich?
 

ymene

Bekanntes Mitglied
Da ich kürzlich was ähnliches brauchte, hab ich die Lösung einfach mal deinen Anforderungen angepasst. Allerdings ist dort noch keine Sonderbehandlung drin, wie die von Michael angesprochen. Stunden können hierbei über bleiben. Ist nicht besonders elegant gelöst, aber sollte dir zumindest einen soliden Ansatz geben.

Java:
package timedifferenz;

import java.util.GregorianCalendar;

public class TimeDifferenz
{
  private static int ANZAHL_VIERUNDZWANZIG = 0;
  private static int ANZAHL_VIERZEHN       = 1;
  private static int ANZAHL_ACHT           = 2;

  /**
   * @param firstDate
   * @param secondDate
   * @return Array mit Anzahl ANZAHL_VIERUNDZWANZIG, ANZAHL_VIERZEHN, ANZAHL_ACHT
   */
  public int[] calculateDifferenz( GregorianCalendar firstDate, GregorianCalendar secondDate )
  {
    int[] array = new int[3];
    array[ 0 ] = 0;
    array[ 1 ] = 0;
    array[ 2 ] = 0;

    long difference = secondDate.getTimeInMillis() - firstDate.getTimeInMillis();

    //Millisekunden in Stunden umzuwandeln: / 1000 (Sekunden) / 60 (Minuten) / 60 (Stunden).
    int hours = (int) (difference / (1000 * 60 * 60));

    while ( hours >= 24 )
    {
      array[ ANZAHL_VIERUNDZWANZIG ] = array[ ANZAHL_VIERUNDZWANZIG ] + 1;
      hours = hours - 24;
    }
    while ( hours >= 14 )
    {
      array[ ANZAHL_VIERZEHN ] = array[ ANZAHL_VIERZEHN ] + 1;
      hours = hours - 14;
    }
    while ( hours >= 8 )
    {
      array[ ANZAHL_ACHT ] = array[ ANZAHL_ACHT ] + 1;
      hours = hours - 8;
    }

    return array;
  }

  public static void main( String[] args )
  {
    //    Startdatum: 01.10.2010 16 Uhr
    //    Enddatum: 02.10.2010 14 Uhr

    GregorianCalendar firstDate1 = new GregorianCalendar( 2010, 10, 01, 16, 0 );

    GregorianCalendar secondDate1 = new GregorianCalendar( 2010, 10, 02, 14, 0 );

    TimeDifferenz calculator = new TimeDifferenz();

    int[] result = calculator.calculateDifferenz( firstDate1, secondDate1 );

    System.out.println( "24 Stunden: " + result[ ANZAHL_VIERUNDZWANZIG ] );
    System.out.println( "14 Stunden: " + result[ ANZAHL_VIERZEHN ] );
    System.out.println( " 8 Stunden: " + result[ ANZAHL_ACHT ] );

    System.out.println( "--------------" );
    //    Startdatum 01.07.2010 16 Uhr
    //    Enddatum 03.07.2010 14 Uhr

    GregorianCalendar firstDate2 = new GregorianCalendar( 2010, 07, 01, 16, 0 );

    GregorianCalendar secondDate2 = new GregorianCalendar( 2010, 07, 03, 14, 0 );

    int[] result2 = calculator.calculateDifferenz( firstDate2, secondDate2 );

    System.out.println( "24 Stunden: " + result2[ ANZAHL_VIERUNDZWANZIG ] );
    System.out.println( "14 Stunden: " + result2[ ANZAHL_VIERZEHN ] );
    System.out.println( " 8 Stunden: " + result2[ ANZAHL_ACHT ] );
  }
}

Grüße,
ymene
 

Michael...

Top Contributor
Nicht ganz,
Du hast in Deinem long difference die angebrochenen Stunden des ersten und des letzten Tages mit drin
Bei. z.B. 01.07.xx 14 Uhr bis 02.07.xx 14 Uhr
würde bei Dir 1 x 24h rauskommen.
Er will aber 2x14h oder 1x8h + 1x14h, je nach dem ob die 10 Stunden des ersten Tages auf 14 aufgerundet oder auf 8 abgerundet werden sollen. (Wenn ich das richtig verstanden habe)
 

andi_j62

Mitglied
Hallo Zusammen,

Danke für die Denkansätze. Michael hat recht, es muss immer auf bzw. ab 24 Uhr gerechnet werden, 1x24 Std kann nur rauskommen wenn die Reise über 3 Tage geht, wie bei meinem Beispiel 1.

ymene es wäre super wenn Du Dein Beispiel vielleicht dahingehend noch mal überarbeiten könntest.
 
Zuletzt bearbeitet:

Eldorado

Bekanntes Mitglied
Du hast noch keinen Deut zu DEINER Aufgabe beigetragen und jetzt willst du auch noch, als man dir schon fast die Lösung bringt, das man diese auch noch an deine genauen Bedürfnisse anpasst. Versuche doch mal selbst etwas zu leisten und wenn du konkrete Probleme hast, steht man dir wieder gerne zur Verfügung.
 

andi_j62

Mitglied
Hallo Eldorado,

wenn ich es wüsste wie es geht, hätte ich keine Anfrage gestellt. So wie das Beispiel von ymene ist, habe ich es auch schon hingebracht. Aber mein Problem liegt eben daran dass ich nicht weiss wie ich es immer auf bzw ab 24 Uhr rechnen kann.

Viele Grüße
Andi
 

Michael...

Top Contributor
Woran hängt's denn? Am Algorithmus oder am Umsetzen in Java Code?
Eigentlich muss du nur den Stundenanteil des Starttermins nehmen und diesen von 24 abziehen, dann hast Du die Stunden des ersten Tages und bewertest diese entsprechend (kann Start und Ende auf den selben Tag fallen?)
Beim Endtermin muss Du nur den Stundenanteil auslesen und bewerten
Um die Anzahl der vollen Tage zu bestimmen musst Du die beiden ersten Werte von der Gesamtdifferenz abziehen.
Java:
int hoursFirstDay = 24 - stundenAnteildesStartdatums;
int hoursLastDay = stundenAnteildesEnddatums;
long difference = secondDate.getTimeInMillis() - firstDate.getTimeInMillis();
int fullDays = (delta / 1000 / 60 / 60 - hoursFirstDay - hoursLastDay) / 24;
 

andi_j62

Mitglied
Hallo Michael,

danke für den Tipp! Ich war irgendwie auf dem Schlauch gestanden da ich immer Tag + Uhrzeit in Millisekunden umgerechnet habe und keine Idee hatte wie man das dann anteilig auf die Tage umrechnen kann. Wenn man die Stunden getrennt rechnet funktioniert das deutlich einfacher.

Ich werde es gleich mal probieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Druckerauflösung per JNA ermitteln Allgemeine Java-Themen 3
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
B Dateistart ermitteln Allgemeine Java-Themen 14
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14
S Alle Dateinamen ermitteln Allgemeine Java-Themen 22
S Marker aus String ermitteln Allgemeine Java-Themen 5
B Mail: Nicht vorhandener Empfänger ermitteln Allgemeine Java-Themen 4
D javassist API Klasse in MethodCall ermitteln Allgemeine Java-Themen 8
J Größe einer CD ermitteln Allgemeine Java-Themen 10
C Ermitteln ob Zeitumstellung war Allgemeine Java-Themen 37
KeexZDeveoper Nächstgelegenden Wert ermitteln Allgemeine Java-Themen 5
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
L Wachstumsordnung der Ausführungszeit ermitteln Allgemeine Java-Themen 7
MiMa MP3 Bitrate ermitteln Allgemeine Java-Themen 7
Aruetiise Interface Position durch JButton ermitteln Allgemeine Java-Themen 5
L Ermitteln der Anzahl an Lösungen von quatratischen Gleichungen (Sieb von Atkin) Allgemeine Java-Themen 1
L Java Version aus Tomcat ermitteln Allgemeine Java-Themen 3
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
F Zeit ermitteln Allgemeine Java-Themen 2
J ermitteln der Anzahl der Monate Allgemeine Java-Themen 7
F Swing selektierte Komponente ermitteln Allgemeine Java-Themen 4
S Einfache Methode die Groesse eines Objekts zu ermitteln? Allgemeine Java-Themen 12
E Ermitteln einer eindeutigen ID eines Objekts möglich? Allgemeine Java-Themen 17
L Jsp: Vorherige Webseite ermitteln Allgemeine Java-Themen 4
K Annotations der aufrufenden Methode ermitteln Allgemeine Java-Themen 11
S per Mausklick Position ermitteln Allgemeine Java-Themen 8
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
K Datum ermitteln Allgemeine Java-Themen 4
R Array Schnittmenge performant ermitteln Allgemeine Java-Themen 8
M Klassen in vielen Jars ermitteln Allgemeine Java-Themen 2
c_sidi90 Routine zum ermitteln des Standardablageverzeichnisses Allgemeine Java-Themen 2
R Windows ermitteln ob Administratorrechte vorhanden Allgemeine Java-Themen 17
E Java Browser ermitteln? Allgemeine Java-Themen 6
F Pfad der laufenden JAR ermitteln (mit Archivnamen) Allgemeine Java-Themen 2
E Java Version Details ermitteln Allgemeine Java-Themen 5
E Performace/Ausführungszeit von Methoden ermitteln Allgemeine Java-Themen 4
J Anwendungen ermitteln ? Allgemeine Java-Themen 5
Iron Monkey Lautstärkeregelung ermitteln Allgemeine Java-Themen 2
Z Position/Größe von Windows-Fenstern ermitteln Allgemeine Java-Themen 12
S Konstruktor ermitteln Allgemeine Java-Themen 3
Iron Monkey Anzahl der Monate ermitteln Allgemeine Java-Themen 17
multiholle Aufrufer einer Funktion ermitteln Allgemeine Java-Themen 13
FoolMoon Elegante Möglichkeit die kleinste Zahl zu ermitteln. Allgemeine Java-Themen 7
T Pfad Anwendungsdaten unter Windows ermitteln Allgemeine Java-Themen 3
D Häufigkeit eines Zeichens ermitteln Allgemeine Java-Themen 5
H2SO3- Pixel länge von String ermitteln Allgemeine Java-Themen 4
D Parametername ermitteln Allgemeine Java-Themen 10
T Nicht verwendete Klassen in Projekten ermitteln? Allgemeine Java-Themen 2
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
T zu Beginn der main: Heap space ermitteln und hochsetzen Allgemeine Java-Themen 11
M Grösse von BorderLayout.CENTER ermitteln Allgemeine Java-Themen 8
G Ermitteln des aufrufenden Objekts Allgemeine Java-Themen 5
G Zeigeranzahl ermitteln Allgemeine Java-Themen 10
S E-Mail-Links: geklickten Link ermitteln Allgemeine Java-Themen 4
D Ahängige Bibliotheken (JARs) ermitteln Allgemeine Java-Themen 6
G restlichen freien Speicher ermitteln? Allgemeine Java-Themen 3
S Hintergrundname eines Buttons ermitteln Allgemeine Java-Themen 3
T Eigene PID ermitteln! Allgemeine Java-Themen 3
M Aus Anzahl Tagen Datum ermitteln Allgemeine Java-Themen 8
S Nicht aufgerufene Methoden in Eclipse ermitteln Allgemeine Java-Themen 18
G größten gemeinsamen Teiler ermitteln Allgemeine Java-Themen 11
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
J zeit überscheidungen ermitteln Allgemeine Java-Themen 6
G PPI von Monitor ermitteln Allgemeine Java-Themen 9
Y Mit Java Betriebssystem ermitteln Allgemeine Java-Themen 6
J Kann eigene Klasse nicht ermitteln Allgemeine Java-Themen 4
O Inhalt vom JTextfield im DebugMode ermitteln? Allgemeine Java-Themen 2
A Jahr ermitteln Allgemeine Java-Themen 2
A Installierte Runtime ermitteln Allgemeine Java-Themen 3
M Nummer eine Componente in JScrollPane ermitteln Allgemeine Java-Themen 4
C Pixelanzahl eines Strings ermitteln Allgemeine Java-Themen 12
G genauen Typ einer generischen Klasse zur Laufzeit ermitteln Allgemeine Java-Themen 2
J Speicherverbrauch des Systems ermitteln Allgemeine Java-Themen 4
M Zeit eines rechners im netzwerk ermitteln Allgemeine Java-Themen 6
F Implementierte Interfaces ermitteln Allgemeine Java-Themen 6
M Bibliotheksname zur Laufzeit ermitteln (Classloader) Allgemeine Java-Themen 7
foobar Angemeldeten Systembenutzer ermitteln Allgemeine Java-Themen 8
P Java installationsverzeichnis ermitteln, wie? Allgemeine Java-Themen 4
C RTF - Dateipfad ermitteln Allgemeine Java-Themen 4
U Arbeitsspeicher ermitteln? Allgemeine Java-Themen 18
W java.io.file Originalziel bei .lnk ermitteln? Allgemeine Java-Themen 5
T OutputStream - Prozente ermitteln Allgemeine Java-Themen 3
M Den Pfad ermitteln aus dem die .jar Datei gestartet wurde Allgemeine Java-Themen 2
I Anwendungspfad ermitteln Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
S Programmname ermitteln Allgemeine Java-Themen 6
W Beziehungen zwischen Usern ermitteln Allgemeine Java-Themen 2
vogella Version von Java ermitteln Allgemeine Java-Themen 2
F JRE Version ermitteln Allgemeine Java-Themen 2
G Dateigröße ermitteln Allgemeine Java-Themen 4
H Speicheverbrauch einer Datenstruktur ermitteln Allgemeine Java-Themen 29
C Generic Type ermitteln Allgemeine Java-Themen 3
R Menge an Bytes eines OutputStreams ermitteln. Allgemeine Java-Themen 6
R Fileendung ermitteln Allgemeine Java-Themen 2
G datentyp ermitteln Allgemeine Java-Themen 8
K Java Version ermitteln (über System.getProperty hinaus) Allgemeine Java-Themen 6
M Pfad zur Klasse ermitteln Allgemeine Java-Themen 2
P Größe eines Directories ermitteln mit allen SubDIR`s Allgemeine Java-Themen 28

Ähnliche Java Themen

Neue Themen


Oben