10.6 Die Klasse Date
 
Die ältere Klasse Date ist durch die Aufgabenverteilung auf die Klassen DateFormat und Calendar sehr schlank. Ein Exemplar der Klasse Date verwaltet ein besonderes Datum oder eine bestimmte Zeit; die Zeitgenauigkeit beträgt eine Millisekunde.
10.6.1 Objekte erzeugen und Methoden nutzen
 
Mit der Date-Klasse können keine Datum-Objekte für Zeitpunkte vor dem 1.1.1970 erzeugt werden. Zwei Konstruktoren der Klasse bleiben uns:
|
Der Standard-Konstruktor, welcher ein Datum-Objekt mit der augenblicklichen Zeit erzeugt. Die gegenwärtige Zeit erfragt dieser Konstruktor mittels System.currentTimeMillis(). |
|
Der zweite Konstruktor bekommt eine Zeitangabe in Millisekunden seit dem Stichtag 1.1.1970 und initialisiert daraufhin das Objekt. Mit Methoden kann nun die Zeit verändert, ausgelesen oder in der zeitlichen Abfolge verglichen werden. |
class java.util.Date
implements Serializable, Cloneable, Comparable
|
|
Date()
Erzeugt ein Datum-Objekt und initialisiert es mit der Zeit, die bei der Erzeugung gelesen wurde. |
|
Date( long date )
Erzeugt ein Datum-Objekt und initialisiert es mit der übergebenen Anzahl von Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT. |
|
long getTime()
Liefert die Anzahl der Millisekunden nach dem 1. Januar 1970, 00:00:00 GMT zurück. |
|
void setTime( long time )
Setzt wie der Konstruktor die Anzahl Millisekunden des Datum-Objekts neu. Wurde ein Datum-Objekt einmal erzeugt, dann ändert sich dies durch das Objekt repräsentierte Datum natürlich nicht mehr automatisch. Um also die Zeit wieder aktuell zu setzen, kann today.setTime( new java.util.Date() ) verwendet werden. |
|
boolean before( Date when )
boolean after( Date when )
Testet, ob das eigene Datum vor oder nach dem Datum des Parameters liegt. true, wenn davor oder danach, sonst false. |
|
boolean equals( Object obj )
Testet die Datum-Objekte auf Gleichheit. true, wenn getTime() für beide den gleichen Wert ergibt und der Parameter nicht null ist. |
|
int compareTo( Date anotherDate )
Vergleicht zwei Datum-Objekte und gibt null zurück, falls beide die gleiche Zeit repräsentieren. Der Rückgabewert ist kleiner null, falls das Datum des aufrufenden Exemplars vor dem Datum von anotherDate ist, sonst größer null. |
|
int compareTo( Object o )
Ist das übergebene Objekt vom Typ Date, dann verhält sich die Funktion wie compareTo(). Andernfalls wirft die Methode, wenn der Parameter sich nicht als Date verhalten kann, eine ClassCastException aus. |
|
toString()
Gibt eine Repräsentation des Datums aus. |
Beispiel Mit der toString()-Funktion können wir ein minimales Zeitanzeige-Programm schreiben. Wir rufen den Standard-Konstruktor auf und geben dann die Zeit aus. Natürlich wird von der println()-Funktion toString() aufgerufen.
|
Listing 10.6
MiniClock.java
import java.util.Date;
class MiniClock
{
public static void main( String args[] )
{
System.out.println( new Date() );
}
}
10.6.2 Zeitmessung und Profiling
 
Die Methode getTime() der Klasse Date gibt einen Zeitpunkt als vergangene Millisekunden ab einem festen Stichtag zurück. Damit kann die Differenz zweier Datum-Objekte auf der Basis von Millisekunden errechnet werden, und diese kann dann zur groben Abschätzung von Ausführungszeiten für Programme dienen.
Listing 10.7
Profiling.java
import java.util.Date;
final class Loop
{
static int loop1( int i )
{
return i * i;
}
int loop2( int i )
{
return i * i;
}
}
class Profiling
{
public synchronized static void main( String args[] )
{
Loop loop = new Loop();
int MAX = 100000000;
// use static function
Date start1 = new Date();
for ( int i = MAX; i-- > 0; )
Loop.loop1( i );
long time1 = new Date().getTime() – start1.getTime();
// use dynamic function
Date start2 = new Date();
for ( int i = MAX; i-- > 0; )
loop.loop2( i );
long time2 = new Date().getTime() – start1.getTime();
System.out.println( "Used time static: " + time1 );
System.out.println( "Used time dynamic: " + time2 );
}
}
Wird das Programm gestartet, so bekomme ich auf meinem Rechner (AMD Athlon 1,2 GHz, Java SDK 1.4rc) die nachstehende Ausgabe:
Used time static: 541
Used time dynamic: 952
Tipp Dieses Beispiel zeigt, an welchen Stellen ein Programmierer optimieren kann. Wenn es auf Geschwindigkeit ankommt, sollte der Einsatz von statischen Methoden in Erwägung gezogen und dynamische Bindungen vermieden werden. Leider macht das unter Umständen den Entwurf kaputt beziehungsweise das Programm später schwieriger zu ändern.
|
|