Java Datum Differenz (kleiner Fehler)

KogoroMori21

Aktives Mitglied
Guten Tag liebes Java-Forum,
ich hab ein kleinen Fehler im Code und weiß nicht genau wie ich den lösen soll.
Kurz zum Verständnis:
Ziel der Aufgabe ist es in der Console seinen Geburtstag einzugeben und er berechnet die Differenz der Tage zum heutigen Datum.

Das Programm sollte so funktionieren das nach dem man das Geburtsdatum eingegeben hat, direkt der Satz erscheint: Hallo Max Mustermann, Du bist XXX Tage alt.
Doch bislang hab ich das so das ich Name und Geburtsdatum eingeben muss und anschließend dann das Datum und dann erscheint erst der Satz..

Ich denk mein Fehler liegt in der Zeile 12: Date date1 = simpleDateFormat.parse(IO.readString());
und in der Zeile 46 bei der String ausgabe.

-Die Ausgabe der Console befindet sich im Anhang.


[CODE lang="java" title="DateTi meUtils"]import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTimeUtils {
//Start der Main-Methode!
public static void main(String[] args) {
DateTimeUtils obj = new DateTimeUtils();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/M/yyyy");

try {
Date date1 = simpleDateFormat.parse(IO.readString());
Date date2 = simpleDateFormat.parse("27/12/2020");
obj.printDifference(date1, date2);
} catch (ParseException e) {
e.printStackTrace();
}
}
//Ende der Main-Methode!

//IO Ausgaben
String vorname = IO.readString("Vorname: ");
String name = IO.readString("Name: ");
int tag = IO.readInt("Geburtsdatum Tag: ");
int monat = IO.readInt("Geburtsdatum Monat: ");
int jahr = IO.readInt("Geburtsdatum Jahr: ");

// 1 minute = 60 seconds
// 1 hour = 60 x 60 = 3600
// 1 day = 3600 x 24 = 86400
public void printDifference(Date startDate, Date endDate) {

// milliseconds
long different = endDate.getTime() - startDate.getTime();


long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;

long elapsedDays = different / daysInMilli;
different = different % daysInMilli;

String ausgabe = "Hallo " + vorname + " " + name + ", " + "Du bist " + elapsedDays + " Tage alt.";
System.out.println(ausgabe);
}

}[/CODE]
 

Anhänge

  • console.JPG
    console.JPG
    17,2 KB · Aufrufe: 30
Du hast die Eingabe des Geburtstages ja zwei Mal:
Java:
    int tag = IO.readInt("Geburtsdatum Tag: ");
    int monat = IO.readInt("Geburtsdatum Monat: ");
    int jahr = IO.readInt("Geburtsdatum Jahr: ");
Das ist die erste Eingabe, die Du aber nicht weiter nutzt.

Was Du nutzt, ist die Eingabe hier:
Java:
Date date1 = simpleDateFormat.parse(IO.readString());
Die Eingabe im zweiten Part nutzt Du dann für die Berechnung, die erste Eingabe nutzt du überhaupt nicht.
 
Du hast die Eingabe des Geburtstages ja zwei Mal:
Java:
    int tag = IO.readInt("Geburtsdatum Tag: ");
    int monat = IO.readInt("Geburtsdatum Monat: ");
    int jahr = IO.readInt("Geburtsdatum Jahr: ");
Das ist die erste Eingabe, die Du aber nicht weiter nutzt.

Was Du nutzt, ist die Eingabe hier:
Java:
Date date1 = simpleDateFormat.parse(IO.readString());
Die Eingabe im zweiten Part nutzt Du dann für die Berechnung, die erste Eingabe nutzt du überhaupt nicht.
Ja genau und mein Ziel ist es die erste Eingabe zur Berechnung zu nutzen und auf die zweite zu verzichten. Doch bislang krieg ich es nicht hin..😅
 
Also der Konstruktor von Date, der Year, Month und Day entgegen nimmt, ist deprecated. Daher wäre etwas wie
Java:
new GregorianCalendar(year, month - 1, day).getTime();
denkbar.

And die Werte kommst ja über die obj Variable. Bitte darauf Achten: Monat ist 0-basiert, also daher 1 abziehen.
 
@mihe7 Hat eine 'oder' Frage gestellt und du hast mit


geantwortet...
Oh tut mir leid, also ich soll Tag, Monat und Jahr eingeben können und daraus sollten sich dann die Anzahl der Tage ermitteln lassen
Java:
    String vorname = IO.readString("Vorname: ");
    String name = IO.readString("Name: ");
    int tag = IO.readInt("Geburtsdatum Tag: ");
    int monat = IO.readInt("Geburtsdatum Monat: ");
    int jahr = IO.readInt("Geburtsdatum Jahr: ");

Wie am Code beispiel zu sehen. Das Problem ist wie gesagt, dass ich nachdem ich das Jahr eingebe, nochmal zusätzlich ein Datum eingeben muss und das Programm die Berechnung an dem Datum durchführt und nicht an dem was ich vorher eingegeben habe. Mein Ziel ist es also, dass ich anschließend nicht nochmal ein Datum eingeben muss, sondern das er mit den Werten die ich schon mit IO.readInt eingegeben habe die Anzahl der Tage bereechnet.
 
Das Problem ist wie gesagt, dass ich nachdem ich das Jahr eingebe, nochmal zusätzlich ein Datum eingeben muss und das Programm die Berechnung an dem Datum durchführt und nicht an dem was ich vorher eingegeben habe.
Das Problem ist vielmehr, dass Du das Datum noch mal einliest, obwohl du schon Tag, Monat & Jahr hast.

Wie du aus Tag, Monat & Jahr ein Date-Objekt erstellen kannst, hat @kneitzel schon in #5 geschrieben.

Allerdings: Date ist "inoffiziell" deprected, davon ist ganz stark abzuraten. LocalDate wäre hier das deutlich sinnvollere.
 

Zurück
Oben