package jhaushalt.domain.zeitraum;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.logging.Logger;
public class Datum implements Comparable<Datum>, Cloneable {
private static final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY);
private final Logger logger = Logger.getLogger(Datum.class.getName());
private Locale locale = Locale.GERMANY;
private GregorianCalendar wert;
public Datum() {
this.wert = new GregorianCalendar();
}
public Datum(final int tag, final int monat, final int jahr) {
this.wert = new GregorianCalendar(jahr, monat - 1, tag);
}
public Datum(String datumString) {
this.wert = new GregorianCalendar();
final String heute = df.format(this.wert.getTime());
if (locale.getLanguage().equals("de") && (datumString.length() < heute.length())) {
datumString = datumString + heute.substring(datumString.length());
}
try {
this.wert.setTime(df.parse(datumString));
}
catch (final java.text.ParseException e) {}
}
@Override
public String toString() {
return df.format(this.wert.getTime());
}
public void setTime(Date time) {
wert.setTime(time);
}
public Date getTime() {
return wert.getTime();
}
public long sub(final Datum datum) {
return (this.wert.getTimeInMillis() - datum.wert.getTimeInMillis()) / 86400000L;
// 1 Tag = 24 * 60 * 60 * 1000 = 86400000 ms
}
public void addiereTage(final int tage) {
this.wert.add(Calendar.DAY_OF_MONTH, tage);
}
public int getTag() {
return this.wert.get(Calendar.DAY_OF_MONTH);
}
public int getMonat() {
return this.wert.get(Calendar.MONTH) + 1;
}
public int getJahr() {
return this.wert.get(Calendar.YEAR);
}
// -- Methoden fuer Interface: Cloneable --------------------
@Override
public final Object clone() {
Datum datum = new Datum();
try {
datum = (Datum) super.clone();
} catch (final CloneNotSupportedException e) {
logger.warning("Clone not works. This should never happen!");
}
datum.wert = (GregorianCalendar) this.wert.clone();
return datum;
}
// -- Methoden fuer Interface: Comparable -------------------
public int compareTo(final Datum datum) {
return this.getTime().compareTo(datum.getTime());
}
@Override
public boolean equals(final Object anotherDatum) {
Datum date = (Datum) anotherDatum;
return compareTo(date) == 0;
}
public boolean istImZeitraum(Zeitraum zeitraum) {
boolean endCheck = zeitraum.getEndDatum().compareTo(this) > 0;
boolean startCheck = zeitraum.getStartDatum().compareTo(this) <= 0;
return startCheck && endCheck;
}
}