# Datumerweiterung



## nuke87 (15. Nov 2016)

Hallo Leute,
ich muss ein Programm erstellen das Folgendes leistet:
z.B. Bei Eingabe 2015 10 7 16 30 30    muss als Ausgabe 2015 10 7 17 0 erscheinen,
weil 30 Minuten nach 16:30 am 7.10.2015 ist: 17:00 am 7.10.2015.
Mein Code macht das aber nicht sondern gibt das Gleiche wieder aus. Also bezogen auf den oberen Beispiel addiert er die 30 Minuten nicht . 
Eigentlich sieht der Code fuer mich richtig aus , vielleicht habe ich was uebersehen.


```
import java.util.Scanner;

public class DatumErweiterung {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int year, month, day, hour, minute, add;

        year = sc.nextInt();
        month = sc.nextInt();
        day = sc.nextInt();
        hour = sc.nextInt();
        minute = sc.nextInt();
        add = sc.nextInt();

        if ((minute + add) > 60)
        {
            minute = (minute + add) % 60;
            hour++;
        }
        if (hour > 23)
        {
            hour = hour % 24;
            day++;
        }
        switch (month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                if (day > 31)
                {
                    day = day % 31;
                    month++;
                }
                break;
            case 2:
                if (day > 28)
                {
                    day = day % 28;
                    month++;
                }
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                if (day > 30)
                {
                    day = day % 30;
                    month++;
                }
                break;
        }
        if (month > 12)
        {
            month = month % 12;
            year++;
        }

        System.out.println(year + " " + month + " " + day + " " + hour + " " + minute);

        sc.close();
    }

}
```


----------



## Meniskusschaden (15. Nov 2016)

nuke87 hat gesagt.:


> Mein Code macht das aber nicht sondern gibt das Gleiche wieder aus. Also bezogen auf den oberen Beispiel addiert er die 30 Minuten nicht .


30 + 30 ergibt 60. Und 60 ist eben nicht größer als 60.


----------



## Thallius (15. Nov 2016)

Du hast wunderbar alle Fälle angefangen, nur nicht en Fall, dass eben einfach die Minuten sich um 30 erhöhen.

Gruß

Claus


----------



## nuke87 (15. Nov 2016)

Ok Danke,   Habe die Zeile 
	
	
	
	





```
if ((minute + add)<60)
            minute = (minute + add);
```
hinzugefuegt und diese Zeile veraendert 
	
	
	
	





```
if ((minute + add) >= 60)
```

und es funktioniert


----------



## Meniskusschaden (15. Nov 2016)

Falls Eingaben wie 2015 10 7 16 45 90 erlaubt sind, hast du noch ein Problem.


----------



## InfectedBytes (15. Nov 2016)

anstatt das mit zwei abfragen zu lösen, wäre es vermutlich einfacher es mit einer zu machen:

```
minuten += add;
if(minuten >= 60) {
  minuten = minuten % 60;
// etc.
}
```

Oder sogar ganz ohne Vergleich:

```
minuten += add;
stunden += minuten / 60;
// ...
// dann noch modulo
minuten %= 60;
// ...
```


----------



## nuke87 (15. Nov 2016)

Meniskusschaden hat gesagt.:


> Falls Eingaben wie 2015 10 7 16 45 90 erlaubt sind, hast du noch ein Problem.


ok jetzt hab ich wirklich ein Problem. wie kann ich es wieder gerade biegen?, ich dachte das* if((minute + add)>=60)* das Problem loest


----------



## Meniskusschaden (15. Nov 2016)

@InfectedBytes hat in Post #6 einen eleganten Ansatz dazu vorgeschlagen.


----------



## nuke87 (15. Nov 2016)

irgendwie kriege ich das nicht hin, 
sagen wir mal ich will diese beide Zeilen lassen 
	
	
	
	





```
if ((minute + add) < 60){
            minute = (minute + add);
        }

        if ((minute + add)>=60){
            minute = (minute + add)%60;
            hour++;
}
```
irgend wie weiss ich nicht wie ich es mit dieser Zeile anfange soll *stunden += minuten /60;*
Also mir ist nicht klar wie ich es machen soll wenn die minuten die ich dazu addiere zum beispiel mehrere Stunden betragen, und das in der Ausgabe sich natuerlich auch die Stunden veraendern anstatt 15 min + 90 min 105 min aus zu geben.


----------



## InfectedBytes (15. Nov 2016)

Bei minuten / 60 wird ein int durch einen anderen int dividiert, daher ist das Ergebnis auch ein int.
Wenn du nun z.b. 150 / 60 rechnest, ist das Ergebnis 2 und dies entspricht eben den zusätzlichen Stunden.


----------

