CX_SPAN_DATE
Klassenhierarchie
Beschreibung:
Diese Klasse besteht aus einem Datum (CX_DATE) und einer Dauer in einer Zeiteinheit (Dauer, CX_VALUE).
Sie kann verschieden Interpretiert werden: Als Intervall (Zeitspanne) aufgefasst stellt das Datum den Start und das Datum verlängert um die Dauer (Start+Dauer) das Ende dar. Als Vorgang aufgefasst, beginnt dieser am Datum und sein Aufwand ist in der Dauer gespeichert. Dieser Aufwand kann dann auch gleich 0 oder sogar negativ sein.
Für diese beiden Bedeutungen gibt es im Wert validEnum noch Flags die bestimmte Spezialfälle abdecken: So kann zum einen bestimmt werden, dass das Intervall unbeschränkt (unendlich) oder halb-unbeschränkt (Start oder Ende fehlt) ist. Zum anderen kann die Dauer sich statt über alle Tage (Brutto) nur über bestimmte Tage wie Arbeitstage (Netto) erstrecken.
Diese Modi schließen sich aus: Ist die Datumsperiode (halb-)unbeschränkt so hat die Dauer keine Bedeutung. (Theoretische Dauer: Unendlich.) Ist die Dauer Netto, so muss die Datumsperiode beschränkt sein.
Die Dauer muss nicht in Tagen angegeben werden. Sie kann auch in Wochen, Monaten, Jahren und so weiter angegeben sein.
Fällt das Datum auf den Anfang einer solchen Periode spricht man von einer diffusen Datumsperiode. In diesem Fall steht die Datumsperiode für eine bestimmte Anzahl von Perioden in der gröberen Einheit.
Auch hier gilt eine Einschränkung gegenüber den Modi: Diffuse Datumsperioden sind immer beschränkt und Brutto.
Bei bestimmten arithmetischen Operation, wie das Setzen des Startdatums, kann es notwendig sein, die Dauer auf einzelne Tage zurückzurechnen.
Das Datum wird, wie jedes Datum, mit dem aktuellen Tagesdatum initialisiert. Die Dauer ist standardmäßig auf 1 Tag gesetzt. Der Standard-Modus ist Brutto und beschränkt (FROM_TO).
In gewisser Hinsicht kann jedes einfache Datum auch als Datumsperiode aufgefasst werden: Viele Funktionen, die eigentlich für eine Datumsperiode konzipiert worden sind, sind auch auf ein Datum anwendbar. Wird dabei eine Dauer von einem Tag vorausgesetzt.
Während ein Datum unvollständig sein kann, muss eine Datumsperiode mindestens eine Jahresangabe besitzen. Es ist also nicht möglich, Perioden wie z.B. "April - Mai" oder "1. - 15." zu definieren.
Code-Beispiel:
1. "Am 10.1.1996"
2. "Vom 10.1.1996 bis zum 12.1.1996"
3. "Das zweite Quartal 1994"
4. "Ab der 14.ten bis inklusive der 17.ten Kalenderwoche 1996"
5. "Ab dem 20.5.1996"
Darstellung am Bildschirm:
Zur Darstellung von Objekten dieser Klasse existieren folgende Möglichkeiten:
1. Verwendung eines Oberflächenobjektes vom Typ String.
In diesem Fall wird das Objekt in einem einzigen Eingabefeld angegeben. Dabei sind neben Eingaben vom Typ "Startdatum - Enddatum" auch Angaben möglich, wie z.B. "2. Quartal 1996". Auch werden Eingaben wie "4KW96-7KW96" (= "vom Beginn der 4.ten Kalenderwoche bis zum Ende der 7.ten Kalenderwoche 1996") unterstützt. Die folgende Tabelle zeigt alle möglichen Darstellungen. Dabei ist zu beachten, dass Jahresangaben zweistellig erfolgen können, wobei dann das aktuell eingestellte Basis-Jahrhundert hinzuaddiert wird. Die Angabe der Einheit, wie z.B. "Mt" für Monat, richten sich nach den eingestellten System-Einheiten. So kann man im Deutschen statt "Mt" auch "Monat" schreiben. Leerzeichen und Punkte sind optional, so dass "2. Quartal 1996" auch als "2Quartal1996" bzw. als "2Q96" geschrieben werden kann.
Eingabe | Datum |
---|---|
Start - Ende | Ab dem Start-Datum bis zum Ende-Datum |
n Kw Jahr | Die n. Kalenderwoche in dem Jahr Jahr |
n Mt Jahr | Der n. Monat in dem Jahr Jahr |
n Q Jahr | Das n. Quartal in dem Jahr Jahr |
n T Jahr | Das n. Tertial in dem Jahr Jahr |
Jahr | Das Jahr Jahr |
n Jz m | Das n. Jahrzehnt in dem m. Jahrhundert |
n Jh | Das n. Jahrhundert |
n Jt | Das n. Jahrtausend |
Anmerkung: Bei der Eingabe einer Datumsperiode werden das Start- und Enddatum durch eines der folgenden Zeichen getrennt: '-', '·' oder '/'.
Die folgenden Abbildungen zeigen Beispiele (Programmcode):
2. Die Verwendung von zwei Oberflächenobjekten vom Typ Date
In dem einen Feld wird das Start- und in dem anderen das Enddatum eingegeben (Programmcode). Dabei ist zu beachten, dass ohne zusätzliche Oberflächenobjekte nur definierte Start- und Enddaten verwaltet werden können, d.h. Angaben wie "ab dem 3.10.1990" sind nicht möglich.
3. Die Verwendung der Oberflächenobjekte Date und String
Das erste Oberflächenobjekt gibt das Startdatum und das zweite die Zeitdauer an (Programmcode). Dabei ist zu beachten, dass ohne zusätzliche Oberflächenobjekte nur definierte Start- und Enddatum verwaltet werden können, d.h. Angaben wie "ab dem 3.10.1990" sind nicht möglich.
Im Zusammenhang mit diesen Darstellungsmöglichkeiten und bestimmten InstantView- Anweisungen spielen die zum Objekt gehörigen Flags eine wichtige Rolle, da mit Ihnen die Darstellung des Objektes modifiziert werden kann.
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
Einzelangaben: | ||||
ValueOfDate | INTEGER | interner Datumswert | ||
Duration | OBJECT | Periodendauer | ||
Tagesangaben: | ||||
DayOfDate | INTEGER | Tag des Datums | ||
WeekOfDate | INTEGER | Kalenderwoche des Datums | ||
MonthOfDate | INTEGER | Monat des Datums | ||
QuarterOfDate | INTEGER | Quartal des Datums | ||
TertianOfDate | INTEGER | Tertial des Datums | ||
YearOfDate | INTEGER | Jahr des Datums | ||
DecadeOfDate | INTEGER | Jahrzehnt des Datums | ||
CenturyOfDate | INTEGER | Jahrhundert des Datums | ||
MilleniumOfDate | INTEGER | Jahrtausend des Datums | ||
Wochenangaben: | ||||
DayOfWeek | INTEGER | Wochentag des Datums | ||
DayInWeek | INTEGER | Wochentag-Position bezüglich Arbeitswochenbeginn | ||
YearOfWeek | INTEGER | Jahr der Kalenderwoche | ||
Monatsangaben: | ||||
DaysInMonth | INTEGER | Tagesanzahl im Monat | ||
Jahresangaben: | ||||
DayOfYear | INTEGER | Tag-Position im Jahr | ||
Einsprachig: | ||||
WeekdayNameOfDay | STRING | Wochentagsname | ||
ShortWeekdayNameOfDay | STRING | abgekürzter Wochentagsname | ||
NameOfMonth | STRING | Monatsname | ||
ShortNameOfMonth | STRING | abgekürzter Monatsname | ||
NameOfDay | STRING | (Feiertags-)Name des Tages | ||
SpecialNameOfDay | INTEGER | STRING | bestimmter (Feiertags-)Name des Tages | |
Mehrsprachig: | ||||
MLWeekdayNameOfDay | MLSTRING | mehrsprachiger Wochentagsname | ||
MLShortWeekdayNameOfDay | MLSTRING | mehrsprachiger abgekürzter Wochentagsname | ||
MLNameOfMonth | MLSTRING | mehrsprachiger Monatsname | ||
MLShortNameOfMonth | MLSTRING | mehrsprachiger abgekürzter Monatsname | ||
MLNameOfDay | MLSTRING | mehrsprachiger (Feiertags-)Name des Tages | ||
MLSpecialNameOfDay | INTEGER | MLSTRING | bestimmter mehrsprachiger (Feiertags-)Name des Tages | |
Konvertierungen: | ||||
ImportDateNumber | STRING, INTEGER | Import der Datumszahl als String | ||
ExportDateNumber | INTEGER, INTEGER | STRING | Export der Datumszahl als String | |
ImportObject | OBJECT | (Start-)Datum setzen | ||
SetDate | STRING, INTEGER | Basisdatum aus der übergebenen Zeichenkette importieren | ||
SetSpanDate 231532 |
STRING, INTEGER | Datumsperiode aus der übergebenen Zeichenkette importieren | ||
Tagestypangaben: | ||||
IsDateType | INTEGER | INTEGER | Ist das Datum ein "spezieller freier Tag"? | |
IsTerm | INTEGER | Ist das Datum ein Termin? | ||
IsAnniversary | INTEGER | Ist das Datum ein Jahrestag? | ||
IsHoliday | INTEGER | Ist das Datum ein Feiertag? | ||
IsVacation | INTEGER | Ist das Datum ein Ferientag? | ||
IsWorkingday | INTEGER | Ist das Datum ein Werktag? | ||
TypeOfDate | INTEGER | Typ des Datums | ||
LeapYear | INTEGER | Ist das Datum ein Schaltjahr? | ||
IsDiffuse | INTEGER | Wird die Dauer nicht in Tagen angegeben? | ||
Datumsvergleiche: | ||||
Encompassed | OBJECT | INTEGER | "Enthalten in"-Test (Konjunktion) | |
Overlap | OBJECT | INTEGER | Überlappungs-Test (Disjunktion) | |
AgeInYMD | OBJECT | VECTOR |
Genaue Differenz zu einem anderen Datum | |
AgeInFullYears | OBJECT | OBJECT | Abgerundete Jahresdifferenz zu einem anderen Datum | |
AgeInCommencedYears | OBJECT | OBJECT | Aufgerundete Jahresdifferenz zu einem anderen Datum | |
Relativangaben: | ||||
First | INTEGER | OBJECT | erster Wochentag im Monat | |
Second | INTEGER | OBJECT | zweiter Wochentag im Monat | |
Third | INTEGER | OBJECT | dritter Wochentag im Monat | |
Fourth | INTEGER | OBJECT | vierter Wochentag im Monat | |
Last | INTEGER | OBJECT | letzter Wochentag im Monat | |
Previous | INTEGER | OBJECT | Suche nach einem vorherigen bestimmten Wochentag | |
Next | INTEGER | OBJECT | Suche nach einem nächsten bestimmten Wochentag | |
NextDate | OBJECT | OBJECT | der Folgetag innerhalb der Datumsperiode | |
NextTerm | OBJECT | OBJECT | der Folgetag innerhalb der Datumsperiode (als DateTime) | |
Easter | OBJECT | Ostersonntags-Berechnung | ||
Erzeugen seines Objektes: | ||||
Day | INTEGER, INTEGER | OBJECT | Erzeugen eines Tagesdatums im aktuellen Jahr | |
Date | INTEGER, INTEGER, INTEGER | OBJECT | Erzeugen eines genauen Tagesdatums | |
SpanDate | OBJECT, OBJECT | OBJECT | Erzeugen einer genauen Datumsperiode | |
Week | OBJECT | Erzeugen einer Kalenderwoche | ||
Month | Erzeugen eines Monats | |||
Quarter | Erzeugen eines Quartals | |||
Tertian | Erzeugen eines Tertials | |||
Year | Erzeugen eines Jahres | |||
Decade | Erzeugen eines Jahrzehnts | |||
Century | Erzeugen eines Jahrhunderts | |||
Millenium | Erzeugen eines Jahrtausends | |||
Einzelangaben: | ||||
SetDay | INTEGER | Setzen eines neuen Tages | ||
SetMonth | INTEGER | Setzen eines neuen Monats | ||
SetYear | INTEGER | Setzen eines neuen Jahres | ||
SetZero | Setzen auf "unbeschränkt" | |||
Start/Ende: | ||||
StartOfPeriod | OBJECT | Periodenbeginn | ||
EndOfPeriod | OBJECT | Periodenende | ||
StartOfPeriodMA | * | Periodenbeginn | ||
EndOfPeriodMA | * | Periodenende | ||
RealStartOfPeriod | OBJECT | Die frühere der Grenzperioden | ||
RealEndOfPeriod | OBJECT | Die spätere der Grenzperioden | ||
FirstPeriod | OBJECT | Erste Teilperiode | ||
LastPeriod | OBJECT | Letzte Teilperiode | ||
SetStartOfPeriod | OBJECT | Setzen eines Startdatums mit Verändern der Periodendauer | ||
SetEndOfPeriod | OBJECT | Setzen des Enddatums mit Verändern der Periodendauer | ||
MoveStartOfPeriod (MovePeriodToStartDate) | OBJECT | Setzen des Startdatums ohne Verändern der Periodendauer | ||
MoveEndOfPeriod (MovePeriodToEndDate) | OBJECT | Setzen des Enddatums ohne Verändern der Periodendauer | ||
SetRealStartOfPeriod | OBJECT | Setzen des früheren Datums mit Verändern der Periodendauer | ||
SetRealEndOfPeriod | OBJECT | Setzen des späteren Datums mit Verändern der Periodendauer | ||
MoveRealStartOfPeriod | OBJECT | Setzen des früheren Datums ohne Verändern der Periodendauer | ||
MoveRealEndOfPeriod | OBJECT | Setzen des späteren Datums ohne Verändern der Periodendauer | ||
SetPeriodBorders | OBJECT, OBJECT | Setzen des Start- und Enddatums | ||
Addition/Subtraktion: | ||||
AddDay | INTEGER | Tages-Addition | ||
AddNetDay | INTEGER, INTEGER | Addiert so viele Tage, dass das Datum um die angegebene Anzahl an Tagen in der gegebenen Tageskategorie verschoben wird | ||
AddWeek | INTEGER | Wochen-Addition | ||
AddMonth | INTEGER | Monats-Addition | ||
AddYear | INTEGER | Jahres-Addition | ||
Mengenoperationen: | ||||
JoinPeriods | OBJECT | OBJECT | Erzeuge aus zwei Datumsperioden eine Vereinigung (Konjunktion) | |
OverlappingPeriod | OBJECT | Erzeuge aus zwei Datumsperioden die Schnittmenge (Disjunktion) | ||
Dauer/Netto/Brutto: | ||||
Duration | OBJECT | Periodendauer (abhängig Tageskategorie) | ||
SetDuration | OBJECT | Setzen der Periodendauer (wird Brutto) | ||
NetDuration | INTEGER | OBJECT | Netto-Periodendauer (für jeweilige Tageskategorie) | |
SetNetDuration | OBJECT, INTEGER | Setzen der Periodendauer für Tageskategorie | ||
GrossDuration | OBJECT | Brutto-Periodendauer (unabhängig Tageskategorie) | ||
SetGrossDuration | OBJECT | Setzen der Periodendauer ohne Tageskategorie | ||
RealDuration | OBJECT | Periodendauer (positiv auch wenn StartOfPeriod später als EndOfPeriod) | ||
SetRealDuration | OBJECT | Setzen der Periodendauer unter Beibehaltung des Vorzeichens | ||
DurationMA | * | Periodendauer | ||
GrossDurationMA | * | Brutto-Periodendauer (unabhängig Tageskategorie) | ||
RealDurationMA | * | Periodendauer (positiv auch wenn StartOfPeriod später als EndPeriod) | ||
IsNet | INTEGER | INTEGER | Ist die Tageskategorie (Netto-Typ) gesetzt? | |
GetNet | INTEGER | Tageskategorien (Bitfeld) | ||
SetNet | INTEGER | setzen der Tageskategorie | ||
string | INTEGER | CX_STRING | Liefert die String-Darstellung des Objektes |
* MA = Member-Access-Funktion
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
---|---|---|---|---|
this | CX_SPAN_DATE | |||
duration | CX_VALUE | Die Periodenlänge. Kann jede Einheit sein, die auf Tag rückführbar ist, sie muss nicht positiv sein. Welche Tage sie umfasst hängt vom Netto-Typ ab. (siehe auch Funktion Duration) | ||
validEnum | INTEGER | Bit 0-1: Der Typ der Zeitspanne: "0" = eine Zeitspanne mit Start und Ende (FROM_TO) "1" = Start, aber es existiert kein Ende (FROM) "2" = Ende, aber es existiert kein Start (TO) "3" = unendlicher Zeitraum ohne Start und Ende (ENDLESS) Bit 2-7: Tageskategorien, auf die sich die Dauer (duration) bezieht. Gesetztes Bit heißt: die jeweilige Kategorie wird aus der Dauer herausgenommen. Ist keines dieser Bits gesetzt (Default) heißt dies also die Dauer ist Brutto, umschließt also alle Tage zwischen Start und Ende. Alle Bits gesetzt kommt nicht vor, da dies bedeuten würde, dass kein Tag mit der Dauer gezählt wird. Die Bits (Kategorien) im einzelnen (siehe auch DatumstypenKonstanten):
|
* I = Indizierbares Datenfeld
Modul | Kurzbeschreibung |
---|---|