Einfache Klassen für Datum und Zeit

fsicher

Bekanntes Mitglied
Ich muss in einem Projekt Datum- und Zeitwerte verwalten können (ein Datum und zwei Zeiten). Dabei ist jeweils nur das Datum (yyyy.MM.dd) bzw. nur die Zeit (hh:mm:ss) von Interesse. In einem ersten Anlauf habe ich dies mit GregorianCalendar gelöst. Da aber diese Klasse komplex (dadurch auch mächtig) ist, würde ich gerne eine eigene Klasse programmieren, die
- genau so mächtig wie GregorianCalendar ist, aber
- etwas einfacher in der Handhabung.

Ein möglicher Ansatz wäre eine Fasade um GregorianCalendar zu machen:

Java:
package my.package;

public class Date {

    private GregorianCalendar gc = null;

    public Date(){
         gc = new GregorianCalendar();
    }

    public Date (int y, int m, int d){
        this();
        gc.set(Calendar.YEAR, y);
        gc.set(Calendar.MONTH, m);
        gc.set(Calendar.DAY_OF_MONTH, d);
    }

    public void setYear(int year){
        gc.set(Calendar.YEAR, year);
    }

    public int getYear(){
        return gc.get(Calendar.YEAR);
    }

    // ...

    public long getAsTimeInMillis(){
        return gc.getTimeInMillis();
    }
}

Mein Problem ist das, dass ich Instanzen dieser Klasse als XML übertragen muss (JAXB). Da ich eine Instanzvariable vom Typ GregorianCalendar habe, wird diese auch verpackt: für mich unnötig und aufwändig (viel Trafic). Die Lösung wäre vermutlich, selbst einen Marshaller zu schreiben ...

Aus diesem Grund habe ich einen anderen Ansatz gewählt:
Java:
package my.project.domain;

import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.xml.bind.annotation.XmlType;


@XmlType(propOrder = { "year", "month", "day" })
public class Date implements Serializable, Comparable<Date> {

	private static final long serialVersionUID = 2516984451145418190L;

	private int year;
	private int month;
	private int day;

	public Date() {
		GregorianCalendar gc = new GregorianCalendar();
		year = gc.get(Calendar.YEAR);
		month = gc.get(Calendar.MONTH) + 1;
		day = gc.get(Calendar.DAY_OF_MONTH);
	}

	public Date(int year, int month, int day) {
		GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);

		this.year = gc.get(Calendar.YEAR);
		this.month = gc.get(Calendar.MONTH) + 1;
		this.day = gc.get(Calendar.DAY_OF_MONTH);
	}


	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		GregorianCalendar gc = new GregorianCalendar(this.year, this.month,
				this.day);
		gc.set(Calendar.YEAR, year);
		this.year = gc.get(Calendar.YEAR);
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		GregorianCalendar gc = new GregorianCalendar(this.year, this.month - 1,
				this.day);
		gc.set(Calendar.MONTH, month);
		this.month = gc.get(Calendar.MONTH) + 1;
	}

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		GregorianCalendar gc = new GregorianCalendar(this.year, this.month,
				this.day);
		gc.set(Calendar.DAY_OF_MONTH, day);
		this.day = gc.get(Calendar.DAY_OF_MONTH);
	}

	@Override
	public String toString() {
		return year + "." + month + "." + day;
	}

	@Override
	public int compareTo(Date param) {
		if (this == param) {
			return 0;
		}

		if (year == param.year) {
			if (month == param.month) {
				return day - param.day;
			} else {
				return month - param.month;
			}
		} else {
			return year - param.year;
		}
	}
}

Der Vorteil (aus meiner Sicht) sind:
- als Instanzvariable haben ich nur einfache Typen (int), womit das generierte XML einfach gehalten werden kann
- kein selbstgeschriebenes JAXB-Marschaller nötig
- kein umfangreiches GregorianCalendar-Objekt im XML
- die Überprüfung von Werten lasse ich von GregorianCalendar machen.

Das Date-Objekt verhält sich sonst ähnlich wie ein GregorianCalendar, hat jedoch eine einfachere Schnittstelle und sieht in der Tat wie ein Datum aus (keine Zeitangaben).

Ählich habe ich es auch für die Zeit gemacht: eine Klasse Time, die ähnlich wie Date aufgebaut ist.

Es würde mich interessieren, ob mein Vorgehen korrekt ist, oder ob ich den Rad neu erfinde? Bzw. hat es schon Konstrukte (Klassen), die diese Aufgabe schon erledigen? Und, habe ich da was übersehen bzw. wären noch Korrekturen / Anpassungen angebracht?

Danke.
 
Zuletzt bearbeitet:

Landei

Top Contributor
Die Klasse [c]Date[/c] ist eine einzige Katastrophe, und sie hat viel mehr drin, als der TO braucht. Insbesondere wenn man "nur Datum" oder "nur Uhrzeit" ausdrücken will, ist [c]Date[/c] völlig ungeeignet. Die API ist mehr als seltsam (null-basierte Monate? Jahre ab 1900?), und dazu kommt noch, dass die Klasse veränderbar ist, also ein permanentes Sicherheitsrisiko darstellt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Spin einfache Frage zu Klassen Java Basics - Anfänger-Themen 12
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
B Einfache OCR zur Zahlenerkennung? Java Basics - Anfänger-Themen 6
M Einfache Datenfilterung Java Basics - Anfänger-Themen 15
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
J Einfache pub/sub Lösung mit ausführlicher Doku Java Basics - Anfänger-Themen 5
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
K einfache Kombinatorik Java Basics - Anfänger-Themen 4
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
P Erste Schritte Einfache For Schleife Java Basics - Anfänger-Themen 10
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
V Erste Schritte Einfache Rechnung mit Exponenten Java Basics - Anfänger-Themen 3
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Sehr einfache Java-Programme Java Basics - Anfänger-Themen 24
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
J Einfache Designfrage Java Basics - Anfänger-Themen 4
R Methoden Einfache Loops? Java Basics - Anfänger-Themen 8
E einfache Frage zu private Java Basics - Anfänger-Themen 26
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
D einfache Quizfrage programmieren Java Basics - Anfänger-Themen 11
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
K Einfache Rekursion - Wert wird nicht in Variable gespeichert Java Basics - Anfänger-Themen 7
U Einfache Aufgabe Java Basics - Anfänger-Themen 5
E Einfache Frage zur Parameterübergabe in Methoden Java Basics - Anfänger-Themen 8
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
M Einfache Rechnung(R=U/I) Java Basics - Anfänger-Themen 12
D Wohl eine einfache Frage... Java Basics - Anfänger-Themen 2
W Einfache Passwortabfrage funktioniert nicht Java Basics - Anfänger-Themen 3
P einfache GUI-Elemente Java Basics - Anfänger-Themen 10
F Vererbung (einfache Frage) Java Basics - Anfänger-Themen 5
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
L einfache Klasse erstellen Java Basics - Anfänger-Themen 16
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
W Einfache Rekursion Java Basics - Anfänger-Themen 14
T Einfache Textausgabe .java unter OS X Java Basics - Anfänger-Themen 13
B einfache Rekursion Java Basics - Anfänger-Themen 9
A [Hilfe] einfache Aufgabe Java Basics - Anfänger-Themen 26
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
M einfache java application Java Basics - Anfänger-Themen 4
S Kann einfache Texteingabe nicht auswerten! Java Basics - Anfänger-Themen 3
M einfache frage zum Jdk-Compiler Java Basics - Anfänger-Themen 3
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
C "einfache" If-Abfrage Java Basics - Anfänger-Themen 15
H Einfache Ausgabe eines Arrays in einen File Java Basics - Anfänger-Themen 8
F Einfache Liste hinten was einfügen Java Basics - Anfänger-Themen 3
L Einfache Umrechnung Java Basics - Anfänger-Themen 2
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
K einfache Multiplikation Java Basics - Anfänger-Themen 6
S Einfache Rechnung mit Schleife Java Basics - Anfänger-Themen 10
G einfache Swing-GUI Java Basics - Anfänger-Themen 3
F Einfache Tastatureingabe Java Basics - Anfänger-Themen 2
L [gelöst] Einfache Aufgabe, läuft aber nicht. Java Basics - Anfänger-Themen 8
S "einfache Klassengeschichten" keine Fehler, läuft Java Basics - Anfänger-Themen 2
R Einfache MVC-Uhr. MVC richtig umgesetzt? [Überarbeitet] Java Basics - Anfänger-Themen 5
A Einfache Frage zur Mehrfachvererbung Java Basics - Anfänger-Themen 3
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
J eine einfache liste Java Basics - Anfänger-Themen 17
D Suche einfache Übungsaufgaben für den JavaCreator! Java Basics - Anfänger-Themen 5
R Einfache Messagebox Java Basics - Anfänger-Themen 9
N einfache Adressdatenbank in Textdatei Java Basics - Anfänger-Themen 8
I einfache Wiedergabe Java Basics - Anfänger-Themen 2
B Warum hat dieser einfache Algorithmus lineare Laufzeit? Java Basics - Anfänger-Themen 3
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K einfache Umfang und Flächenberechnung mit interfaces Java Basics - Anfänger-Themen 3
M Einfache HTML Mail versenden , suche Beispiel Java Basics - Anfänger-Themen 5
L MVC-einfache frage Java Basics - Anfänger-Themen 13
M einfache schleife Java Basics - Anfänger-Themen 7
M Einfache Schleife Java Basics - Anfänger-Themen 4
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben