source: Java_Quellcode_SOOP_Vorlesung/oop/Datum.java

Last change on this file was 430, checked in by tr, 5 years ago

Klasse Datum: parameterloser Konstruktor

File size: 2.9 KB
Line 
1package eu.hsrw.tr.prog.vl.oop;
2
3public class Datum {
4
5    int tag;
6    int monat;
7    int jahr;
8
9    /**
10     * Legt ein Datumsobjekt an. Führt keine Plausibilitätsprüfung der
11     * übergebenen Daten durch. Anmerkung: Üblicherweise verwendet man für die
12     * Parameter eines Konstruktors exakt die Variablennamen der entsprechenden
13     * Attribute der Klasse. Dadurch wird die Verwendung von <code>this</code>
14     * erzwungen und die Zuordnung ist eindeutig klar. Hier wurde davon
15     * abgesehen, um zu demonstrieren, dass die Gleichnamigkeit der Parameter
16     * und Attribute eine Konvention und keine erzwungene Syntax ist.
17     *
18     * @param t
19     *            Tag des Datums
20     * @param m
21     *            Monat des Datums
22     * @param j
23     *            Jahr des Datums
24     */
25    public Datum(int t, int m, int j) {
26        this.tag = t;
27        this.monat = m;
28        this.jahr = j;
29    }
30
31    /**
32     * Legt ein Datumsobjekt für den 01. Januar des übergebenen Jahres an. Nutzt den
33     * Konstruktor Datum(int, int, int). Keine Plausibilitätsprüfung.
34     *
35     * @param j Jahr des Datums
36     */
37    public Datum(int jahr) {
38        this(1, 1, jahr);
39    }
40
41    /**
42     * Legt ein Datumsobjekt für den 01. Januar 1970 an. Nutzt den Konstruktor
43     * Datum(int). Keine Plausibilitätsprüfung.
44     */
45    public Datum() {
46        this(1970);
47    }
48   
49    /**
50     * Copy Konstruktor, legt eine Kopie des übergebenen Datum Objektes an.
51     * @param d zu kopierendes Datum Objekt
52     */
53    public Datum(Datum d) {
54        this.tag = d.tag;
55        this.monat = d.monat;
56        this.jahr = d.jahr;
57    }
58
59    /**
60     * Erhöht dieses Datum einen Tag unter Berücksichtigung der
61     * Gültigkeitsregeln für Datumsangaben.
62     */
63    public void erhoehe() {
64        switch (this.monat) {
65            case 1:
66            case 3:
67            case 5:
68            case 7:
69            case 8:
70            case 10:
71            case 12:
72                if (this.tag < 31) {
73                    this.tag++;
74                } else {
75                    this.tag = 1;
76                    if (this.monat < 12) {
77                        this.monat++;
78                    } else {
79                        this.monat = 1;
80                        this.jahr++;
81                    }
82                }
83                break;
84            case 4:
85            case 6:
86            case 9:
87            case 11:
88                if (this.tag < 30) {
89                    this.tag++;
90                } else {
91                    this.tag = 1;
92                    this.monat++;
93                }
94                break;
95            case 2:
96                if (this.tag < 28 || (this.tag == 28 && Datum.istSchaltjahr(this.jahr))) {
97                    this.tag++;
98                } else {
99                    this.tag = 1;
100                    this.monat = 3;
101                }
102                break;
103            default: break;
104        }
105    }
106
107    /**
108     * Überprüft für ein beliebiges Jahr, ob es sich um ein Schaltjahr handelt.
109     *
110     * @param jahr
111     *            Zu prüfendes Jahr
112     * @return true, falls es sich um ein Schaltjahr handelt, sonst false
113     */
114    public static boolean istSchaltjahr(int jahr) {
115        // Regel: alle durch 4 teilbaren Jahre sind Schaltjahre, außer die durch
116        // 100 teilbaren Jahre. Durch 400 teilbare Jahre sind degegen wiederum
117        // Schaltjahre
118        return ((jahr % 4 == 0) && (jahr % 100 != 0)) || (jahr % 400 == 0);
119    }
120
121    /**
122     * Liefert das Datum als Zeichenkette in der üblichen deutschen Schreibweise
123     * Tag.Monat.Jahr
124     */ 
125    public String toString() {
126        return this.tag + "." + this.monat + "." + this.jahr;
127    }
128}
Note: See TracBrowser for help on using the repository browser.