Advanced   Java   Services Date, Calendar Back Next Up Home

Date

Für die Klasse Date benötigt man das Import java.util.*;

Wichtige Konstruktoren
Date()
 
Allocates a Date object and initializes it so that it represents the time at which it was allocated, measured to the nearest millisecond.
Date(long date)
 
Allocates a Date object and initializes it to represent the specified number of milliseconds since the standard base time known as "the epoch", namely January 1, 1970, 00:00:00 GMT.
Wichtige Methoden
Returntyp Name der Methode
boolean
 
after(Date when)
Tests if this date is after the specified date.
boolean
 
before(Date when)
Tests if this date is before the specified date.
Object
 
clone()
Return a copy of this object.
int
 
compareTo(Date anotherDate)
Compares two Dates for ordering.
boolean
 
equals(Object obj)
Compares two dates for equality.
long
 
getTime()
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.
void
 
setTime(long time)
Sets this object to represent a point in time that is time milliseconds after January 1, 1970 00:00:00 GMT.
String
 
toString()
Converts this Date object to a String of the form: dow mon dd hh:mm:ss zzz yyyy

Das aktuelle Datum bekommt man mit

Date curr = new Date();
System.out.println(curr.toString());
//Mon Jul 28 14:20:20 CEST 2003

Das Ausgabeformat steht im Kommentar. Das folgende Beispiel demonstriert einige der Methoden.

import java.util.*;

public class DateDemo
{
   public static void main(String[] args)
   {
      Date date1 = new Date();
      System.out.println("date1 = "+date1);

      try{ Thread.sleep(2000); } catch(Exception ex){}

      Date date2 = new Date();
      System.out.println("before "+ date1.before(date2) ); // true

      Date date3 = (Date)date1.clone();
      System.out.println("equals "+ date1.equals(date3) ); // true

      long millis = date2.getTime() ;
      Date date4 = new Date(millis - 10000) ;

      System.out.println("date2 = "+date2);
      System.out.println("date4 = "+date4); // 10 Sekunden früher
   }

}

Formatieren eines Datums mit DateFormat

Mit der Klasse DateFormat aus dem Paket java.text. kann man ein Dateobjekt für die Ausgabe formatieren. Dazu holt man sich mit der statischen Methode getDateInstance() ein DateFormatobjekt und übergibt der Methode format das zu formatierende Datum:

import java.util.*;
import java.text.*;

public class DateDemo2
{
   public static void main(String[] args)
   {
      Date date = new Date();

      DateFormat df = DateFormat.getDateInstance() ;
      String formattedDate = df.format(date)  ;
      System.out.println(formattedDate);  // tt.mm.jjjj
   }
}

DateFormat verfügt über eine zweite statische Methode getDateInstance(), der man den Stil der Formatierung übergeben kann (siehe Übungen).


Calendar

Für die Klasse Calendar benötigt man das Import java.util.*;

Wichtige Methoden
Returntyp Name der Methode
static Calendar
 
 
getInstance()
Gets a calendar using the default time zone and locale.
Statische Methode als Ersatz für Konstruktor.
static Calendar
 
 
getInstance(Locale aLocale)
Gets a calendar using the default time zone and specified locale.
Statische Methode als Ersatz für Konstruktor.
abstract void
 
add(int field, int amount)
Date Arithmetic function.
boolean
 
after(Object when)
Compares the time field records.
boolean
 
before(Object when)
Compares the time field records.
boolean
 
equals(Object obj)
Compares this calendar to the specified object.
int
 
get(int field)
Gets the value for a given time field.
Date
 
getTime()
Gets this Calendar's current time.
void
 
set(int field, int value)
Sets the time field with the given value.
void
 
set(int year, int month, int date)
Sets the values for the fields year, month, and date. Die methode ist so überladen, daß man zusätzlich noch die Stunde, die Minute und die Sekunde setzen kann.
void
 
setTime(Date date)
Sets this Calendar's current time with the given Date.

Calendar ist der Nachfolger der Klasse Date, ersetzt aber die Klasse Date nicht vollständig. Date hat eine ganze Reihe von Methoden, die deprecated sind und für die auf Methoden der Klasse Calendar verwiesen wird. Calendar ist eine abstrakte Klasse, hat aber, wie bei manchen abstrakten Klassen üblich, statische Methoden als Konstruktorersatz. Diese liefern ein Objekt einer Klasse, die die abstrakte Klasse Calendar realisiert hat. Es gibt auch eine konkrete Unterklasse von Calendar, die Klasse GregorianCalendar. Diese Klasse hat sieben verschiedene Konstruktoren zur Initialisierung ihrer Objekte. Schaut man in den Quellcode der Klasse Calendar, so sieht man daß getInstance() sich beruft auf eine private Methode namens createCalendar() und diese wiederum legt in den meisten Ländern der Erde ein Objekt vom Typ GregorianCalendar an. Hier ein Blick in den Quellcode von Calendar:

public static Calendar getInstance()
{
   return createCalendar(TimeZone.getDefault(), Locale.getDefault());
}

private static Calendar createCalendar(TimeZone zone, Locale aLocale)
{
   if (aLocale.getLanguage().compareTo("th") == 0)
   {
      if (aLocale.getCountry().compareTo("TH") == 0)
      {
         return new sun.util.BuddhistCalendar(zone, aLocale);
      }
   }
   // else create the default calendar
   return new GregorianCalendar(zone, aLocale);
}

Für Europa ist liefert also

Calendar cal = Calendar.getInstance();

das gleiche Objekt wie

GregorianCalendar greg =
            new GregorianCalendar(TimeZone.getDefault(), Locale.getDefault());

und zwar die aktuelle Systemzeit.


Übergänge von Date zu Calendar und vice versa

Von Date nach Calendar:

Date d = new Date();
Calendar cal = Calendar.getInstance().setTime(d);

Von Calendar nach Date:

Calendar cal = Calendar.getInstance();
Date d = cal.getTime() ;

Ein Calendarobjekt mit einem selbstgewählten Datum

Achtung:
Die Monate Januar bis Dezember sind durchnumeriert von 0 bis 11.
Die Wochentage gehen nicht von Montag bis Sonntag, sondern von Sonntag bis Samstag (Kirchenwoche...) und sind durchnumeriert von 1 bis 7.
Die Tage im Monat beginnen gottseidank mit 1.

Calendar cal = new GregorianCalendar(1789, 6, 14); // 6 = Juli
// 14. Juli 1789

Einzelheiten dieses historischen Datums erhält man mit der get-Methode:

System.out.println("DATE: " + cal.get(Calendar.DATE)); // liefert 14
System.out.println("DAY_OF_MONTH: " + cal.get(Calendar.DAY_OF_MONTH));// liefert 14
System.out.println( cal.get(Calendar.MONTH) ); // liefert 6
System.out.println( cal.get(Calendar.YEAR) ); // liefert 1789

System.out.println("DAY_OF_WEEK: " + cal.get(Calendar.DAY_OF_WEEK)); // liefert 3
// 1=Sonntag, 2=Montag, 3=Dienstag

Wenn man lange genug in der API liest, dann erfährt man, daß Calendar.DATE und Calendar.DAY_OF_MONTH immer den gleichen Wert liefern. Calendar.DAY_OF_WEEK sagt uns, daß die französische Revolution an einem Dienstag begann.


Ein Calendarobjekt formatieren mit DateFormat

Die Methode format() von DateFormat erwartet ein Dateobjekt, also verwenden wir getTime() :

Calendar cal = new GregorianCalendar(1789, 6, 14); // 6 = Juli, also 14. Juli 1789

DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG) ;
String longFormatted = longFormat.format(cal.getTime())  ;
System.out.println(longFormatted);  // liefert 14. Juli 1789

DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL) ;
String fullFormatted =fullFormat.format(cal.getTime())  ;
System.out.println(fullFormatted); // liefert Dienstag, 14. Juli 1789

Übungen

Übungen zu Date und Calendar

Valid XHTML 1.0 Strict top Back Next Up Home