[Java] Datum filtern und verändern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von PdT, 10. September 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 10. September 2009
    Datum filtern und verändern

    Heyho liebe Raid-Rush'ler,

    ich habe, von meiner Ausbildung aus, die Aufgabe bekommen eine Java-Applikation zu schreiben, welche die Tage zählt von meinem Geburtsdatum aus bis Heute.

    Ich muss vorweg sagen das vor einer Woche von 0 angefangen habe mit Java zu programmieren, deswegen entschuldige ich mich vorweg für diese triviale Frage und meinen, wahrscheinlich, total falschen Ansatz.

    Ich habe damit angefangen:

    Code:
    import java.util.Calendar;
    
    public class altersRechner {
     public static void main (String [] args) {
     Calendar heute = Calendar.getInstance();
    Jetzt stellt sich mir die Frage, wie ich das Datum in eine andere Variable legen. Ich habe mir überlegt das ich Jahr/Monat/Tag einzeln rausziehe:

    Code:
     Calendar Jahr = Calendar.getYear();
     Calendar Monat = Calendar.getMonth();
     Calendar Tag = Calendar.getDay();
    Jedoch macht er das nicht -> connot find symbol

    Kann mir wer helfen, wie ich das Datum rausziehen kann?

    Ich bitte nicht darum das mir jeman das Programm schreibt sondern mir hilft etwas voran zu kommen =)


    Update:

    Ich habe es jetzt geschafft Eingaben zutätigen, welche den Benutzer nach seinen Geburtsdatum fragt und dieses in Strings speichert. Nun muss ich es noch schaffen, dass das Systemdatum gelesen wird und auch in 3 (ich habe bei der eingabe Tag/Monat/Jahr) von einander getrennt und in 3 Strings gespeichert) Strings speichert. Kann mir da vielleicht jemand Tipps geben, wie ich das am besten Bewerkstellige?

    Update2:

    Ich habe es jetzt auch geschafft das heutige Datum in 3 variiablen zu packen:

    Code:
     
    Calendar heute = GregorianCalendar.getInstance();
    
     int heute_tag = heute.get(Calendar.DAY_OF_MONTH);
     int heute_monat = heute.get(Calendar.MONTH);
     int heute_jahr = heute.get(Calendar.YEAR);
    
    Jetzt fehlt nur noch die Berechnung der Differenz, mit Berücksichtigung von Schaltjahren. Falls da jemand Tipps hat wäre ich auch sehr dankbar, glaube das wird jetzt ein ganzschöner Brocken v.v


    PdT
     
  2. 10. September 2009
    AW: Datum filtern und verändern

    Hallo PdT,

    ich kenne Java leider nur in kleinen Anfängen, daher kenne ich die Calendar-Klasse nicht. Mir stellt sich nur eine Frage:

    Ist der Rückgabewert von
    Code:
    Calendar.getYear();
    vom Typ Calendar ? Rein logisch würde ich eher ein Integer oder Long (...) vermuten.

    Hofffe das hilft.

    BG MaxDev

    EDIT: Hmm. Vielleicht nächstes Mal gleich antworten und nicht erst drei andere Sachen machen. Sorry.
     
  3. 10. September 2009
    AW: Datum filtern und verändern

    Trotzdem vielen dank für deine Mühe :] (bw hast du)

    Update 3:

    Hab jetzt das Grundgerüst für das Zählen aufgeschrieben, ich werde es hier mal Abtippen. Falls ihr einen Logik-Fehler findet sagt es mir, damit ich es nicht versuche so umzusetzen und mich dann Festfahre =)

    Code:
    Deklariere einen Zähler
    
    Wiederhole solange bis
    [INDENT]Taggeburt = tag heute
    UND
    Monatgeburt = monat heute
    UND
    jahrgeburt = jahrheute
    [/INDENT]Wiederhole solange bis
    [INDENT]Taggeburt = Tage des Monats
    [INDENT]Taggeburt + 1
    zähler +1
    [/INDENT][/INDENT]Wenn 
    [INDENT]Taggeburt = Tage des Monats
    [INDENT]Monat + 1
    Taggeburt = 1
    zähler +1
    [/INDENT][/INDENT]Wenn 
    [INDENT]Monat = 13
    [INDENT]Monat = 1
    Jahr + 1
    zähler + 1
    Tag geburt = 1
    
    [/INDENT][/INDENT]Wenn alles Erfüllt ist
    [INDENT]Ausgabe (Sie sind "zähler" tage alt)[/INDENT]
    So in etwa hab ich mir das gedacht. Jemand Verbesserungsvorschläge / Kritik?

    (Es fehlt noch komplett die Berücksichtigung der Schaltjahre, weil ich da noch keine Ahnung habe, wie ich das mache :-/ )
     
  4. 10. September 2009
    AW: Datum filtern und verändern

    Mach es dir doch nicht so schwer. Für sowas gibt es z.B. in C# eine vorgefertigte Klasse namens TimeSpan. Sowas kann man sich auch einfach nachbauen in Java (nativ ist sowas meines Wissens nach nicht vorhanden). Natürlicherweise kamen auch schon andere auf solch eine Idee:

    How to calculate number of days between two Timestamp (Programming Diversions forum at JavaRanch)

    Post Nr. 3

    Nimmst 2 Daten (dein Bday und Heute, subtrahierst die und lässt dir die Tage ausgeben).

    Kannst dir anhand der Klasse auch anschauen wie das genau funktioniert.

    greez
     
  5. 10. September 2009
    AW: Datum filtern und verändern

    Hmm.. ich weiß jetzt nicht wie "stark" ihr das Problem "selbst" lösen sollt.^^
    Es gibt einen Lösungsweg mit der Date Klasse, so ähnlich wie es cable oben schon vorschlägt, du kannst es aber natürlich auch anders machen.
    Spoiler
    Um das heutige Datum rauszukriegen benutzt du einfach die Methode getTime() deines Calendar Objekts, da bekommst du ein Date-Objekt heraus.
    Eigene Date Objekte soll man sich (laut Dokumentation) erstellen, indem man sich Calendar Objekt erstellt, mit set() die Zeit einstellt und sich dann mit getTime() das Objekt holt.
    Das Date Objekt hat die Methode getTime() mit der man einen long-Wert erhält, der die Millisekunden darstellt, die seit dem Datum January 1, 1970, 00:00:00 GMT vergangen sind. Oder du benutzt wie vorgeschlagen die TimeSpan Klasse.

    Was das Schaltjahr betrifft:
    Wenn du schon zählen möchtest, könntest du ja einfach dabei Abfragen, ob Februar der 28. ist und dann gucken ob die beiden ersten Stellen des Jahre von rechts (also bei 2009 die 09) ganzzahlig durch vier teilbar ist (Stichwort Modulo %). Wenn ja dann zählst du einfach 2 Tage dazu. Zu beachten ist auch, dass alle 100 Jahre ein Schaltjahr ausfällt, wenn ich mich nicht irre (so oder so ähnlich -> WP).

    gl!
     
  6. 10. September 2009
    AW: Datum filtern und verändern

    SO, ich bin fertig und es klappt alles. Ich danke allen die mir hier geholfen haben, dadurch hab ich wieder ein Stück mehr von Java verstanden =)

    An jeden von euch ging eine BW raus, ich hoffe das, wenn ich wieder Probleme habe bei einem Programm, ihr wieder freundlich versucht mir zu helfen =P

    der endgültige Code:

    Code:
    import java.util.Date;
    import java.util.Calendar;
    import java.io.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.*;
    
    
    public class altersRechner {
     public static void main (String [] args) {
     Calendar heute = GregorianCalendar.getInstance();
     int [] tageDesMonats = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
     
     
     System.out.println("Bitte taetigen Sie alle Eingaben mit Zahlen, NICHT mit Buchstaben!");
     
     holTag holen1 = new holTag();
     String tag = holen1.getBenutzereingabe("Bitte geben Sie den Tag, an welchem Sie geboren wurden, ein: ");
     
     holMonat holen2 = new holMonat();
     String monat = holen2.getBenutzereingabe("Bitte geben Sie den Monat, an welchen Sie geboren wurden, ein: ");
     
     holJahr holen = new holJahr();
     String jahr = holen.getBenutzereingabe("Bitte geben Sie das Jahr, in welchem Sie geboren wurden, ein: ");
    
     int int_tag = Integer.parseInt(tag);
     int int_monat = Integer.parseInt(monat);
     int int_jahr = Integer.parseInt(jahr);
     
     int heute_tag = heute.get(Calendar.DAY_OF_MONTH);
     int heute_monat = heute.get(Calendar.MONTH);
     int heute_jahr = heute.get(Calendar.YEAR);
     
     int testif1 = 0;
     int testif2 = 0;
     int testif3 = 0;
     
     heute_monat += 1;
     int schaltjahrtest = int_jahr;
     
     System.out.println("Sie wurden am " + tag + "." + monat + "." + jahr + " geboren.");
     System.out.println("Und heute ist der: " + heute_tag + "." + heute_monat + "." + heute_jahr + "...");
     
     int zaehler;
     
     zaehler = tageDesMonats[int_monat] - int_tag;
     int_monat++;
     for (int startwert = int_monat; int_monat < 13; int_monat++) {
     switch (int_monat) {
     case 1: case 3: case 5: case 7: case 8: case 10: case 12:
     zaehler += 31;
     break;
     case 4: case 6: case 9: case 11:
     zaehler += 30;
     break;
     case 2:
     if (int_jahr % 4 == 0) {
     zaehler += 29;
     if (int_jahr % 100 == 0) {
     zaehler -= 1;
     if (0 == int_jahr % 400 ) {
     zaehler += 1;
     }
     }
     } else {
     zaehler += 29;
     } 
     }
     }
     
     int_jahr++;
     int_monat = 1;
     for (int startwert2 = int_jahr; int_jahr <= heute_jahr; int_jahr++) {
     int_monat = 1;
     for (int startwert3 = int_monat; int_monat < 13; int_monat++) {
     switch (int_monat) {
     case 1: case 3: case 5: case 7: case 8: case 10: case 12:
     zaehler += 31;
     break;
     case 4: case 6: case 9: case 11:
     zaehler += 30;
     break;
     case 2:
     if (int_jahr % 4 == 0) {
     zaehler += 29;
     if (int_jahr % 100 == 0) {
     zaehler -= 1;
     if (0 == int_jahr % 400 ) {
     zaehler += 1;
     }
     }
     } else {
     zaehler += 29;
     }
     
     }
     } 
     }
     int_monat = 1;
     for (int startwert4 = int_monat; int_monat < heute_monat + 1; int_monat++) {
     switch (int_monat) {
     case 1: case 3: case 5: case 7: case 8: case 10: case 12:
     zaehler += 31;
     break;
     case 4: case 6: case 9: case 11:
     zaehler += 30;
     break;
     case 2:
     if (int_jahr % 4 == 0) {
     zaehler += 29;
     if (int_jahr % 100 == 0) {
     zaehler -= 1;
     if (0 == int_jahr % 400 ) {
     zaehler += 1;
     }
     }
     } else {
     zaehler += 29;
     }
     
     }
     }
    
     zaehler += heute_tag;
     
     System.out.println("Das bedeutet Sie sind: " + zaehler + " Tage alt.");
     }
    }
    
    
    (nicht wundern über die vielen Importe xD


    /closed
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.