source: Java_Quellcode_SOOP_Vorlesung/oop/Datum.java @ 398

Last change on this file since 398 was 398, checked in by tr, 7 years ago

Datum angepasst

File size: 2.7 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. Keine
33     * Plausibilitätsprüfung.
34     *
35     * @param j
36     *            Jahr des Datums
37     */
38    public Datum(int jahr) {
39        this(1, 1, jahr);
40    }
41
42    /**
43     * Copy Konstruktor, legt eine Kopie des übergebenen Datum Objektes an.
44     * @param d zu kopierendes Datum Objekt
45     */
46    public Datum(Datum d) {
47        this.tag = d.tag;
48        this.monat = d.monat;
49        this.jahr = d.jahr;
50    }
51
52    /**
53     * Erhöht dieses Datum einen Tag unter Berücksichtigung der
54     * Gültigkeitsregeln für Datumsangaben.
55     */
56    public void erhoehe() {
57        switch (this.monat) {
58        case 1:
59        case 3:
60        case 5:
61        case 7:
62        case 8:
63        case 10:
64        case 12:
65            if (this.tag < 31) {
66                this.tag++;
67            } else {
68                this.tag = 1;
69                if (this.monat < 12) {
70                    this.monat++;
71                } else {
72                    this.monat = 1;
73                    this.jahr++;
74                }
75            }
76            break;
77        case 4:
78        case 6:
79        case 9:
80        case 11:
81            if (this.tag < 30) {
82                this.tag++;
83            } else {
84                this.tag = 1;
85                this.monat++;
86            }
87            break;
88        case 2:
89            if (this.tag < 28 || (this.tag == 28 && Datum.istSchaltjahr(this.jahr))) {
90                this.tag++;
91            } else {
92                this.tag = 1;
93                this.monat = 3;
94            }
95            break;
96        default: break;
97        }
98    }
99
100    /**
101     * Überprüft für ein beliebiges Jahr, ob es sich um ein Schaltjahr handelt.
102     *
103     * @param jahr
104     *            Zu prüfendes Jahr
105     * @return true, falls es sich um ein Schaltjahr handelt, sonst false
106     */
107    public static boolean istSchaltjahr(int jahr) {
108        // Regel: alle durch 4 teilbaren Jahre sind Schaltjahre, außer die durch
109        // 100
110        // teilbaren Jahre. Durch 400 teilbare Jahre sind degegen wiederum
111        // Schaltjahre
112        return ((jahr % 4 == 0) && (jahr % 100 != 0)) || (jahr % 400 == 0);
113    }
114
115    /**
116     * Liefert das Datum als Zeichenkette in der üblichen deutschen Schreibweise
117     * Tag.Monat.Jahr
118     */ 
119    public String toString() {
120        return this.tag + "." + this.monat + "." + this.jahr;
121    }
122}
Note: See TracBrowser for help on using the repository browser.