Programmieren mit C++

Code-Beispiele & Lösungen

Die Grid-Control-Klassenbibliothek

Die Klasse IntlDate

Die Klasse IntlDate bietet Funktionen zur Datumsmanipulation an, die sich an der Borland-TDate-Klasse orientieren. Allerdings unterstützt die Klasse IntlDate die Internationalisierung der Datumsstrings. Ferner kann ein IntlDate-Objekt aus einem TDate-Objekt konstruiert werden.

Aufzählungen

typedef enum DateConstant { 
   idYesterday, idToday, idTomorrow 
};

Die Aufzählung DateConstant enthält Werte für für die logischen Dati heute, gestern und morgen.

Aufzählung DateConstant

typedef enum DateElement  { 
  idDay, idMonth, idYear 
};

Die Elemente der Aufzählung DateElement listen die drei möglichen Datumstypen auf. Diese können entweder ein Tag, ein Monat oder ein Jahr sein.

Aufzählung DateElement

typedef enum MonthType { 
   January = 1, February, March, April, May, 
   June, July, August, September, October, 
   November, December 
};

MonthType listet die Monate beginned bei 1 für Januar auf.

Aufzählung MonthType

typedef enum WeekDay  {
   Monday, Tuesday, Wednesday, Thursday,
   Friday, Saturday, Sunday, InvalidDay 
};

Die Aufzählung WeekDays stellt alle Wochentage zusammen und definiert einen ungültigen Tag.

Sprachen

Aufzählung WeekDay

Das Objekt kann die Datumsangaben in fünf verschiedene Sprachen übersetzen. Um die entsprechenden Strings zu bestimmen, wird das Objekt Language verwendet. Als Vorgabe wird die Sprache verwendet, die im Sektor [intl] der Datei WIN.INI spezifiziert ist. Dieser Datei werden auch die Datumsformate entnommen, die jedoch ebenfalls später geändert werden können.

Format Strings

Datumsstrings werden unter Verwendung sogenannter Format Strings erzeugt. Diese lehnen sich an die Windows-Konventionen an, wie sie auch in der Datei WIN.INI Verwendung finden:

Symbol

Umsetzung

d

Übersetzt einen Monatstag in die Zahl 1-31

dd

Übersetzt einen Monatstag in eine Zahl zwischen 1 und 31, wobei Werte kleiner zehn eine führende Null vorangestellt bekommen

ddd

Konvertiert den Wochentag in die Kurzdarstellung. Das konkrete Erscheinungsbild hängt dabei von der gewählten Sprache ab.

dddd

Übersetzt den Wochentag in die lange, vollständige Schreibweise.

m

Wandelt den Monatswert in eine Zahl zwischen 1 und 12

mm

Stellt für Monate kleiner zehn der Zahl eine Null voran.

Mmm

Konvertiert den Monat in die entspr. Kurzdarstellung des Namens.

mmmm

Verwendet den vollständigen Monatsnamen gemäß der gewählten Sprache.

yy

Wandelt den Jahresanteil in eine zweiziffrige Darstellung

yyyy

Gibt die Jahresangabe mit vier Ziffern wieder.

Zusätzlich wurden neue Symbole für erweiterte Datumsformatierungen eingeführt:

Symbol

Umsetzung

q

Bestimmt das Quartal als Zahl zwischen 1 und 4

s

Hängt an die Zahl des Monatstags einen Text, der eine Rangzahl ergibt, für die deutsche Sprache z. B. „.“. Dieses Symbol sollte direkt auf das Symbol „d“ folgen.

w

Liefert die zugehörige Kalenderwoche zwischen 1 und 53, wobei die erste Kalenderwoche beim ersten Montag des Jahres beginnt.

ww

Liefert die Kalenderwoche wie „w“, jedoch zusätzlich mit einer führenden Null für die ersten neun Wochen.

Unterschiedliche internationale Formate

Die Schreibweise wird für die Symbole ddd, dddd, mmm und mmmm berücksichtigt. Ist der erste Buchstabe des Symbols großgeschrieben, wird auch der erste Buchstabe des Namens groß geschrieben, sofern dies nicht ohnehin der Fall ist.

Groß-/ Kleinschreibung

Alle übrigen Buchstaben und Zeichen gelten in Format Strings als Literale, die unverändert übernommen werden. Kommen in Literalen Zeichen vor, die als Symbole klassifiziert wurden, muß diesen Zeichen ein Backslash angehängt werden.

Literale

Der Format String

Aujourd\’hui nous sommes le dddd ds mmmm yyyy

wird übersetzt nach

Aujourd’hui, nous sommes le mardi 10 janvier 1995

Öffentliche Konstruktoren

Beispiel

IntlDate ()

Diese elementare Form des Konstruktors erzeugt ein IntlDate-Objekt und initialisiert dieses mit Null.

IntlDate (DateConstant org)

Dieser Konstruktur erzeugt ein IntlDate-Objekt und besetzt den Wert gemäß dem relativen Datum in org, für das drei Werte erlaubt sind: idToday, idYesterday, idTomorrow.

IntlDate (const IntlDate &d)

Der Kopierkonstruktor erzeugt ein neues Objekt aus einem bereits bestehenden IntlDate-Objekt.

IntlDate (int d, int m, int y)

Diese Variante des Konstruktors setzt das Datum nach der Erzeugung auf das Datum, das sich aus Tag d, Monat m und Jahr y ergibt.

IntlDate (long n)

Erzeugt ein IntlDate-Objekt aus einem LongInteger, der von einem anderen IntlDate-Objekt erhalten wurde.

IntlDate (const char *str, 
          const char *fmt= 0, 
          idLanguage l = idUndefLanguage)
IntlDate (const string &str, 
          const char *fmt = 0, 
          idLanguage l = idUndefLanguage)
IntlDate (const char *str, 
          const string &fmt, 
          idLanguage l = idUndefLanguage)
IntlDate (const string &str, 
          const string &fmt, 
          idLanguage l = idUndefLanguage)

Es gibt vier Varianten, um aus einem Datumsstring ein Objekt mit einem Datum zu erzeugen. Dazu wird der in fmt übergebene Format String verwendet. Ist dieser nicht spezifiziert, wird statt dessen die Systemvorgabe verwendet, wobei in allen Fällen l die verwendete Sprache angibt.

IntlDate (const TDate &d)

Erzeugt ein IntlDate-Objekt aus einem Borland-TDate-Objekt.

Öffentliche Operatoren

IntlDate

IntlDate &operator += (long n)

Addiert n Tage auf das aktuelle Datum.

Operator +=

IntlDate &operator -= (long n)

Subtrahiert n Tage vom aktuellen Datum.

Operator -=

IntlDate &operator ++ ()
IntlDate &operator ++ (int)

Vor- und Nach-Inkrementation des aktuellen Datums.

Operator ++

IntlDate &operator -- ()
IntlDate &operator -- (int)

Vor- und Nach-Dekrementation des aktuellen Datums.

Operator --

bool operator == (const IntlDate &b) const
bool operator != (const IntlDate &b) const
bool operator <= (const IntlDate &b) const
bool operator >= (const IntlDate &b) const
bool operator < (const IntlDate &b) const
bool operator > (const IntlDate &b) const

Die Vergleichsoperatoren vergleichen ein IntlDate-Objekt sowohl mit einem anderen IntlDate-Objekt als auch mit einem Long-Datumswert:

Vergleichsoperatoren mit IntlDate-Objekt

bool operator == (long n) const
bool operator != (long n) const
bool operator <= (long n) const
bool operator >= (long n) const
bool operator < (long n) const
bool operator > (long n) const

Vergleichsoperator mit Long-Wert

IntlDate operator = (const IntlDate &d)

Der Zuweisungsoperator weist dem Objekt den Wert eines anderen IntlDate-Objekts zu.

IntlDate operator = (const TDate &d)

Die zweite Variante des Zuweisungsoperators weist dem IntlDate-Objekt den Wert eines TDate-Objekts zu.

IntlDate operator = (long n)

Eine weitere Variante weist dem Objekt das korrespondierende Datum eines Long-Werts zu.

Operator =

friend IntlDate operator + (const IntlDate &d, long n)

Der Summenoperator liefert die Summe des Datums d und dem Integerwert n.

Operator +

friend long operator - (const IntlDate &d, const IntlDate &b)

Der Differenzoperator returniert die Differenz in Tagen zwischen den Datumsangaben d und b.

friend IntlDate operator - (const IntlDate &d, long n)

Die zweite Variante des Differenzoperators gibt das datum d vermindert um den Wert n Tage zurück.

Operator -

operator long const

Der Operator long liefert die Long-Darstellung eines Datums zurück.

Operator long

operator TDate const

Mit dem Operator TDate wird ein IntlDate-Datum in ein TDate-Objekt konvertiert.

Öffentliche Memberfunktionen

Operator TDate

char DaysInMonth () const

Die Memberfunktion DaysInMonth returniert die Anzahl der Tage des aktuellen Monats.

Memberfunktion DaysInMonth

IntlDate &Dec (DateElement f = idDay, 
               long n = 1)

Dekrementiert den aktuellen Datumswert über das in f spezifizierte Element um n Einheiten. F kann idDay, idMonth oder idYear sein. Die Datumsvalidierung wird dabei automatisch durchgeführt. Wird z. B. beim aktuellen Datum 31. Oktober um einen Monat dekrementiert, resultiert der 30. September.

Memberfunktion Dec

short DosDate () const

DosDate ermittelt das gegenwärtige Datum des Systems im DOS-kompatiblen 16-Bit-Format.

Memberfunktion DosDate

WeekDay DoW () const

Liefert den Wochentag des aktuellen Datums.

Memberfunktion DoW

in DoY () const

Returniert den Tag des aktuellen Jahrs. Die Werte liegen zwischen 1 und 365 bzw. 356, abhängig davon, ob es sich um ein Schaltjahr handelt.

Memberfunktion DoY

int GetDay () const

Liefert den Tag des aktuellen Monats. Dieser Wert liegt zwischen 1 und 28 bzw. 31, abhängig vom jeweiligen Monat.

Memberfunktion GetDay

int GetMonth () const

Extrahiert den Monatsanteil aus dem aktuellen Datum.

Memberfunktion GetMonth

int GetYear () const

liefert den Jahresanteil des aktuellen Datums.

Memberfunktion GetYear

IntlDate &Inc (DateElement f = idDay, 
               long n = 1)

Inkrementiert den aktuellen Datumswert über das in f spezifizierte Element um n Einheiten. F kann idDay, idMonth oder idYear sein. Die Datumsvalidierung wird dabei automatisch durchgeführt. Wird z. B. beim aktuellen Datum 31. Oktober um einen Monat dekrementiert, resultiert der 30. November.

Memberfunktion Inc

IntlDate &InterpretString (
      const char *s, const char *fmt = 0, 
      idLanguage = idUndefLanguage)
IntlDate &InterpretString (
      const string &s, const char *fmt = 0, 
      idLanguage = idUndefLanguage)
IntlDate &InterpretString (
      const char *s, const string &fmt, 
      idLanguage = idUndefLanguage)
IntlDate &InterpretString (
      const string &s, const string &fmt, 
      idLanguage = idUndefLanguage)

Übersetzt das Datum in einen String unter Benutzung des Format Strings fmt. Ist kein Format String spezifiziert, wird die Systemvorgabe verwendet. l gibt an, welche Sprache verwendet werden soll.

Memberfunktion InterpretString

bool IsNull () const

Returniert TRUE, wenn das aktuelle Datum 0 ist.

Memberfunktion IsNull

bool IsValid () const

IsValid() überprüft das aktuelle Datum auf Gültigkiet und liefert TRUE, wenn das Datum gültig ist, ansonsten FALSE.

Memberfunktion IsValid

bool IsLeap () const

Die Memberfunktion IsLeap() liefert TRUE, wenn das aktuelle Jahr ein Schaltjahr ist.

bool IsLeap (int y) const

Die zweite Variante von IsLeap() überprüft ein beliebiges in y bereitgestelltes Jahr auf die Eigenschaft Schaltjahr und liefert im Erfolgsfall TRUE zurück.

IsLeap

bool IsValidMonth (int m) const

Mit IsValidMonth() kann m daraufhin überprüft werden, ob es sich um einen gültigen Monat handelt. Dazu muß m zwischen 1 und 12 liegen. Im Erfolgsfall returniert die Funktion TRUE, ansonsten FALSE.

Memberfunktion IsValidMonth

bool IsValidMonthDay (int m) const

Die Memberfunktion IsValidMonthDay() überprüft, ob der angegebene Tag m ein gültiger Tag für den Monat des aktuellen Jahrs, ist und liefert im Erfolgsfalls TRUE zurück.

Memberfunktion IsValidMonthDay

bool IsValidWeekDay (int d) const

Diese Funktion liefert TRUE, wenn der Tag d im Bereich Monday–Tuesday liegt.

IntlDate &Set (int n, DateElement f = idDay)

Memberfunktion IsValidWeekDay

Set setzt das Element f des aktuellen Datums auf den Wert n, wobei eine automatische Gültigkeitsprüfung erfolgt.

IntlDate &Set (int d, int m, int y = 0)

Die zweite Variante von Set setzt das Datum auf Tag d, Monat m und Jahr y. Ist y == 0, wird anstelle der Parameterangaben das Systemdatum verwendet.

Memberfunktion Set

string String(const char *picture = 0, 
         idLanguage l = idUndefLanguage)
         string String(const string &picture, 
         idLanguage l = idUndefLanguage)

Übersetzt das Datum in einen String unter Verwendung des Format String fmt und der Sprache l. Ist kein Format spezifiziert, wird die Systemvorgabe verwendet.

Memberfunktion String

IntlDate &Today ()

Today() setzt das Datum auf das aktuelle Systemdatum.

Memberfunktion Today

IntlDate &Tomorrow ()

Tomorrow() setzt das Datum auf den Tag, der dem aktuellen Systemdatum folgt.

Memberfunktion Tomorrow

IntlDate &Yesterday ()

Yesterday() setzt das Datum auf den Tag, der dem aktuellen Systemdatum voranging.

Memberfunktion Yesterday

int WoY (int firstWeekDay = int(Monday)) const

Returniert die Kalenderwoche des aktuellen Datums unter der Annahme, daß die erste Kalenderwoche mit dem ersten Arbeitstag des Jahres beginnt.

Memberfunktion WoY

IntlDate &Zero ()

Zero setzt das Datum auf 0.

Statische öffentliche Members

Memberfunktion Zero

static string &GetPicture ()

GetPicture() liefert einen Zeiger auf den aktuellen Default Format String.

Memberfunktion GetPicture

static void SetDefCentury (int century)

Setzt das Jahrhundert, das standardmäßig für kurze, zweistellige Jahreszahlen angenommen wird.

Memberfunktion SetDefCentury

static void SetPicture (const char *p)
static void SetPicture (const string &p)

SetPicture() setzt den Standard Format String auf p.

Geschützte Members

Memberfunktion SetPicture

static string Picture

In Picture wird der Standard Format String gespeichert.

Member Picture

static short defaultCentury

defaultCentury enthält das Jahrhundert, das standardmäßig für die Interpretation kurzer, zweistelliger Jahreszahlen verwendet wird.

Member defaultCentury

static const short DaysBeforeMonth[13]

In DaysBeforeMonth wird der jeweils erste Tag jedes Monats für Nicht-Schaltjahre gespeichert.

Member DaysBeforeMonth

char day

day speichert den aktuellen Tag des Monats.

Member day

char month

In month steht der aktuelle Monat.

Member month

char year

year enthält das aktuelle Jahr.

Member year

long dayNumber

In dayNumber speichert das Objekt einen Long-Wert, der das akuelle Datum als linearen Wert ausdrückt. Dieser Wert ist immer mit den Werten day, month und year synchronisiert.

Member dayNumber

long CalcDayNumber ()

Ermittelt den Wert für dayNumber aus den Werten von day, month und year.

Memberfunktion CalcDayNumber

IntlDate &CalcDMY ()

Ermittelt die Werte für day, month und year anhand des aktuellen Wert von dayNumber.

Memberfunktion CalcDMY





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 01:43:29 von textarchiv.alojado.de