001 package de.hska.info1.uebung.objekte;
002
003 /**
004 * Ein Datum im Gregorianischen Kalender
005 * bestehend aus Tag, Monat und Jahr.
006 *
007 * @author Christian Pape
008 *
009 */
010 public class Datum {
011
012 /**
013 * Tag im Monat (1..31)
014 */
015 private int tag;
016
017 /**
018 * Monat 1 = Jan, ..., 12 = Dez
019 */
020 private int monat;
021
022 /**
023 * positive Zahl für das Jahr
024 */
025 private int jahr;
026
027 public Datum(int tag, int monat, int jahr) {
028 this.tag = tag;
029 this.monat = monat;
030 this.jahr = jahr;
031 }
032
033 /**
034 * Gibt genau dann <code>true</code> zurück, wenn das Jahr
035 * dieses Datums ein Schaltjahr ist.
036 */
037 public boolean isSchaltjahr() {
038 return jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0;
039 }
040
041 /**
042 * Gibt genau dann <code>true</code> zurück, wenn das Datum
043 * ein korrektes Datum im Gregorianischen Kalendar darstellt
044 * (tag, monat und jahr passen zusammen).
045 */
046 public boolean isKorrekt() {
047 if (jahr >= 0 && 0 < monat && monat <= 12 ) {
048 switch (monat) {
049 case 1:
050 case 3:
051 case 5:
052 case 7:
053 case 8:
054 case 10:
055 case 12: return 0 < tag && tag <= 31;
056 case 2: if (isSchaltjahr()) {
057 return 0 < tag && tag <= 29;
058 } else {
059 return 0 < tag && tag <= 28;
060 }
061 case 4:
062 case 6:
063 case 9:
064 case 11: return 0 < tag && tag <= 30;
065 }
066 }
067
068 return false;
069 }
070
071 /**
072 * Gibt den Tag im Monat dieses Datums zurück (1,...,31).
073 * Falls das Datum nicht korrekt ist, wird -1 zurückgegeben.
074 */
075 public int getTag() {
076 if (isKorrekt()) {
077 return tag;
078 }
079
080 return -1;
081 }
082
083 /**
084 * Gibt den Monat dieses Datums zurück (1=Jan, ..., 12=Dez).
085 * Falls das Datum nicht korrekt ist, wird -1 zurückgegeben.
086 */
087 public int getMonat() {
088 if (isKorrekt()) {
089 return monat;
090 }
091 return -1;
092 }
093
094 /**
095 * Gibt das Jahr dieses Datums zurück.
096 * Falls das Datum nicht korrekt ist, wird -1 zurückgegeben.
097 */
098 public int getJahr() {
099 if (isKorrekt()) {
100 return jahr;
101 }
102 return -1;
103 }
104
105 /**
106 * Gibt das Datum im Format "1. Januar 2000 / Schaltjahr",
107 * bzw. "5. August 1999 / kein Schaltjahr"
108 * zurück. Falls das Datum nicht korrekt ist wird
109 * "ungültiges Datum" zurückgegeben.
110 */
111 public String toString() {
112 String datumString = "ungültiges Datum";
113
114 if (isKorrekt()) {
115 datumString = tag + ". " + getMonatsName() + " " + jahr ;
116 if (isSchaltjahr()) {
117 datumString += " / Schaltjahr";
118 } else {
119 datumString += " / kein Schaltjahr";
120 }
121 }
122 return datumString;
123 }
124
125 /**
126 * Gibt den Namen des Monats (in Deutsch) zurück.
127 * Falls das Datum nicht korrekt ist, wird "" zurückgegeben.
128 */
129 private String getMonatsName() {
130 if (isKorrekt()) {
131 switch (monat) {
132 case 1: return "Januar";
133 case 2: return "Februar";
134 case 3: return "März";
135 case 4: return "April";
136 case 5: return "Mai";
137 case 6: return "Juni";
138 case 7: return "Juli";
139 case 8: return "August";
140 case 9: return "September";
141 case 10: return "Oktober";
142 case 11: return "November";
143 case 12: return "Dezember";
144 }
145 }
146
147 return "";
148 }
149 }