Datums-/Zeitmasken und Formatkennungen

EGL verwendet ein Muster von Groß- und Kleinbuchstaben, um die Komponenten einer DATE-, TIME-, TIMESTAMP- oder INTERVAL-Variable darzustellen. Bei diesen Zeichen muss zwischen Groß-/Kleinschreibung unterschieden werden und alle Buchstaben im Muster werden zu einer Komponente des Datums oder der Zeit ausgewertet. Die Regeln für die Verwendung dieser Buchstaben unterscheiden sich leicht, abhängig davon, wie Sie sie verwenden:

Weitere Informationen zu den internen Werten dieser Variablen finden Sie unter "Primitive-Datentypen".

INTERVAL-Maske erstellen

Bei einer Maske im Monatsbereichsformat können Sie die folgenden Zeichen in der gezeigten Reihenfolge verwenden:
y
Null bis neun Ziffern, die die Anzahl der Jahre im Intervall angeben.
M
Null bis neun Ziffern, die die Anzahl der Monate im Intervall angeben. Wenn M nicht das erste Zeichen der Maske ist, sind maximal zwei Stellen zulässig.

Die Standardmaske ist yyyyMM.

Bei einer Maske im Sekundenbereichsformat können Sie die folgenden Zeichen in der gezeigten Reihenfolge verwenden:
d
Null bis neun Ziffern, die die Anzahl der Tage im Intervall angeben.
H
Null bis neun Ziffern, die die Anzahl der Stunden im Intervall angeben. Wenn H nicht das erste Zeichen der Maske ist, sind maximal zwei Stellen zulässig.
m
Null bis neun Ziffern, die die Anzahl der Minuten im Intervall angeben. Wenn m nicht das erste Zeichen der Maske ist, sind maximal zwei Stellen zulässig.
s
Null bis neun Ziffern, die die Anzahl der Sekunden im Intervall angeben. Wenn s nicht das erste Zeichen der Maske ist, sind maximal zwei Stellen zulässig.
f
Maximal sechs Ziffern für die Sekundenbruchteile. Die erste Ziffer gibt die Zehntelsekunden an, die zweite die Hundertstelsekunden usw. Selbst wenn f das erste Zeichen der Maske ist, sind nur sechs Stellen zulässig.
Am Anfang und am Ende der Maske können null Zeichen des jeweiligen Typs stehen. Die Zeichen in der Mitte sind jedoch obligatorisch. Folgende Masken sind gültig:
  yyyyyyMM
  yyyyyy
  MM

  ddHHmmssffffff
  HHmmssff
  mmss
  HHmm
Die folgenden Masken sind hingegen nicht gültig, weil dazwischenliegende Zeichen fehlen:
  // NICHT gültig
  ddmmssffffff 
  HHssff

TIMESTAMP-Maske erstellen

Wenn Sie die Maske angeben, sind folgende Zeichen in der hier angegebenen Reihenfolge verfügbar:
yyyy
Die ganze Zahl, die das Jahr angibt. Die gültigen Werte liegen im Bereich von 0000 bis 9999.
MM
Zwei Ziffern, die den Monat angeben. Die gültigen Werte liegen im Bereich von 01 bis 12.
dd
Zwei Ziffern, die den Tag angeben. Die gültigen Werte liegen im Bereich von 01 bis 31.
HH
Zwei Ziffern, die die Stunde angeben. Die gültigen Werte liegen im Bereich von 00 bis 23.
mm
Zwei Ziffern, die die Minute angeben. Die gültigen Werte liegen im Bereich von 00 bis 59.
ss
Zwei Ziffern, die die Sekunde angeben. Die gültigen Werte liegen im Bereich von 00 bis 59.
f
Maximal sechs Ziffern für die Sekundenbruchteile. Die erste Ziffer gibt die Zehntelsekunden an, die zweite die Hundertstelsekunden usw.

Die Standardmaske ist yyyyMMddHHmmss.

Außerdem gelten die folgenden Regeln (Ausnahmen finden Sie unter "Kompatibilität" in diesem Abschnitt):
  • Am Anfang und am Ende der Maske können null Zeichen des jeweiligen Typs stehen. Die Zeichen in der Mitte sind jedoch obligatorisch.
  • Folgende Masken sind gültig:
      yyyyMMddHHmmss
      yyyy
      MMss
  • Die folgenden Masken sind nicht gültig, weil dazwischenliegende Zeichen fehlen:
      // NICHT gültig
      ddMMssffffff
      HHssff

Anzeige- oder Parsing-Format erstellen

Beim Scannen einer Eingabezeichenfolge zum Einstellen des Werts einer Datums-/Zeitvariablen verwendet EGL den aktuellen Wert einer der folgenden Systemvariablen (abhängig vom Typ der Variablen):
  • strLib.defaultDateFormat
  • strLib.defaultTimeFormat
  • strLib.defaultTimestampFormat

Die Regeln für ein Parsing-Format sind ähnlich wie diejenigen für ein Anzeigeformat - mit Ausnahmen, die in den folgenden Regeln angegeben sind.

Sie können eine Datums-/Zeitvariable in eine Zeichenfolge für die Ausgabe konvertieren, indem Sie eine der folgenden Systemfunktionen verwenden:
  • strLib.formatDate()
  • strLib.formatTime()
  • strLib.formatTimestamp()
Sie können jeden der folgenden Werte verwenden, um das Format für die Konvertierung anzugeben:
  • Das Formatmuster Ihrer eigenen Erstellung.
  • Eines von mehreren Standardmustern, die EGL als Konstanten definiert (siehe die strLib-Funktion "formatDate()").
  • Das entsprechende Standardformat (wie z. B. strLib.defaultDateFormat), abhängig vom Typ der Variablen, die Sie konvertieren.

Erstellen Sie Ihr eigenes Formatmuster, indem Sie Buchstaben verwenden, um die Komponenten des Datums oder der Zeit anzugeben. Um Buchstaben in die Datums-/Zeitzeichenfolge aufzunehmen, ohne dass Text als Komponente des Datums oder der Zeit geparst wird, schließen Sie den/die Buchstaben in einfache Anführungszeichen ein. Um ein einfaches Anführungszeichen im Datum, der Zeit oder Zeitmarke anzuzeigen, verwenden Sie zwei einfache Anführungszeichen.

Die folgende Tabelle listet die Buchstaben und ihre Werte im Muster auf.

Buchstabe Datums- oder Zeitkomponente Typ Beispiele
G Bezeichner für die Zeitrechnung Text n. Chr.
y Jahr Jahr 1996; 96
M Monat Monat Juli; Jul; 07
w Kalenderwoche Zahl 27
W Woche des Monats Zahl 2
D Tag des Jahres Zahl 189
d Tag des Monats Zahl 10
F Wochentag Zahl 2
E Wochentag Text Dienstag; Die
a Markierung AM/PM für vormittags/nachmittags Text PM
H Stunde des Tages (0-23) Zahl 0
k Stunde des Tages (1-24) Zahl 24
K Stunde der 12-Stunden-Uhr (0-11) Zahl 0
h Stunde der 12-Stunden-Uhr (1-12) Zahl 12
m Minute Zahl 30
s Sekunde Zahl 55
S Millisekunden (Ausgabe) Zahl 978
f Millisekunden (Parsing) Zahl 978
z Zeitzone Allgemeine Zeitzone Pacific Standard Time; PST; GMT-08:00
Z Zeitzone Zeitzone gemäß RFC 822 -800
C Jahrhundert Jahrhundert 20; 21

Wenn derselbe Buchstabe mehrfach hintereinander in einem Muster verwendet wird, bestimmt dies, wie EGL die entsprechenden Zahlen, Buchstaben oder beides in der Zeichenfolge parst. Die Interpretation hängt vom Typ des Buchstaben ab und davon, ob das Muster für die Formatierung oder das Parsing verwendet wird. Die folgende Liste beschreibt die Typen von Buchstaben und wie die unterschiedliche Anzahl dieser Buchstaben beeinflusst, wie sie interpretiert werden.

Text
Wenn die Anzahl der Buchstaben den Wert 4 überschreitet, wird für die Ausgabe das vollständige Format verwendet. Andernfalls wird eine Abkürzung verwendet, sofern eine solche verfügbar ist. Bei der Analyse werden beide Formate unabhängig von der Anzahl der Buchstaben im Muster akzeptiert.
Zahl
Die Anzahl der Buchstaben im Muster gibt die Mindestanzahl Ziffern an. Kürzere Zahlen werden durch Nullen aufgefüllt, damit sie die vorgeschriebene Länge haben. Beim Parsing wird die Anzahl der Musterbuchstaben ignoriert, es sei denn, diese ist zur Trennung von zwei benachbarten Feldern erforderlich.
Jahr
Liegt die Anzahl der Buchstaben im Muster bei zwei, wird das Jahr mit nur zwei Zahlen angegeben. Andernfalls wird die Angabe als Typ 'Zahl' interpretiert.

Ist die Anzahl der Buchstaben im Muster ungleich zwei, wird das Jahr unabhängig von der Zahl der Stellen wie angegeben interpretiert. Wenn Ihrem Wert 01/11/12 beispielsweise das Muster MM/dd/yyyy zugeordnet ist, ergibt das Parsing 'Januar 11, 12 nC'. Wird dasselbe Muster dem Wert 01/02/3 oder 01/02/0003 zugeordnet, ergibt das Parsing 'Januar 2, 3 nC'. Eine Zuordnung des Musters zum Wert 01/02/-3 würde beim Parsing 'Januar 2, 4 vC' ergeben.

Lautet das Muster für das Parsing yy, ermittelt der Parser die vollständige Jahresangabe bezogen auf das aktuelle Jahr. Der Parser geht davon aus, dass die zweistellige Jahresangabe in einem Zeitraum von 80 Jahren vor und 20 Jahren nach dem Zeitpunkt der Verarbeitung liegt. Angenommen, das aktuelle Jahr ist 2007. Wenn Ihrem Wert 01/11/12 das Muster MM/dd/yy zugeordnet ist, ergibt das Parsing 'Januar 11, 2012'. Wird dasselbe Muster dem Wert 05/04/64 zugeordnet, ergibt das Parsing 'Mai 4, 1964'.

Monat
Liegt die Anzahl der Buchstaben im Muster bei drei oder darüber, wird der Monat als Typ 'Text' interpretiert. Andernfalls wird die Angabe als Typ 'Zahl' interpretiert.
Millisekunden
Verwenden Sie SSSS für die Formatierung einer INTERVAL- oder TIMESTAMP-Variablen. (Verwenden Sie aber ffff, wenn Sie die Variable deklarieren.) Betrachten Sie die folgenden Beispiele:
t TIMESTAMP( "ssffff" );
s STRING = StrLib.formatTimestamp( t, "ssSSSS" );
Allgemeine Zeitzone
Allgemeine Zeitzonen werden als Typ 'Text' interpretiert, sofern sie einen Namen haben. Zeitzonen, die die Differenz zur GMT angeben, haben folgende Syntax:

GMTOffsetTimeZone = GMT Vorzeichen Stunden Minuten

Vorzeichen
+ oder -
Stunden
Eine ein- oder zweistellige Zahl von 0 bis 23. Das Format ist von der Ländereinstellung unabhängig und muss im Block 'Basic Latin' des Unicode-Standards enthalten sein.
Minuten
Eine zweistellige Zahl von 00 bis 59. Das Format ist von der Ländereinstellung unabhängig und muss im Block 'Basic Latin' des Unicode-Standards enthalten sein.

Beim Parsing werden RFC 822-Zeitzonen ebenfalls akzeptiert.

Zeitzone gemäß RFC 822
Für die Formatierung wird das vierstellige Zeitzonenformat gemäß RFC 822 verwendet.

RFC822TimeZone = Vorzeichen zweistellige Stunde Minuten

zweistellige Stunde muss eine zweistellige Zahl von 00 bis 23 sein. Im Übrigen gelten die Definitionen für den allgemeinen Zeitzonentyp.

Für das Parsing werden auch allgemeine Zeitzonen akzeptiert.

Jahrhundert
Wird als Typ 'Zahl' angezeigt, der das Ergebnis der folgenden Berechnung anzeigt: vollständige Jahresangabe geteilt durch 100 - der Rest wird ignoriert.

Nachfolgend sind einige Beispiele für Datums- und Zeitmuster angegeben, die nach der US-Ländereinstellung interpretiert wurden. Alle verwenden dasselbe Datum: 4. Juli 2001, 12:08:56 (nachmittags), Pacific Daylight Time.

Datums- und Zeitmuster Ergebnis
yyyy.MM.dd G 'at' HH:mm:ss z 2001.07.04 AD at 12:08:56 PDT
EEE, MMM d, ''yy Wed, Jul 4, '01
h:mm a 12:08 PM
hh 'o''clock' a, zzzz 12 o'clock PM, Pacific Daylight Time
K:mm a, z 0:08 PM, PDT
yyyyy.MMMMM.dd GGG hh:mm aaa 02001.July.04 AD 12:08 PM
EEE, d MMM yyyy HH:mm:ss Z Wed, 4 Jul 2001 12:08:56 -0700
yyMMddHHmmssZ 010704120856-0700

Kalenderkennungen

Die Kennungen für das Datums-/Zeitformat können auch Kalenderkennungen enthalten. Diese Kennungen geben ein Kalendersystem an, das EGL verwendet, um eine Datumszeichenfolge für die Eingabe zu parsen oder um eine Datumszeichenfolge für die Ausgabe zu formatieren. EGL führt eine Konvertierung zwischen dem Zeichenfolgedatum für einen angegebenen Kalender und dem internen Wert der DATE-, TIME- oder TIMESTAMP-Variable aus.

Die aus zwei Buchstaben bestehende Kalenderkennung muss sich am Anfang eines Datumsmusters befinden. Sie muss einen Großbuchstaben an der ersten Stelle und einen Kleinbuchstaben an der zweiten Stelle haben. In der folgenden Tabelle werden die verfügbaren Kalender aufgelistet:
Tabelle 1. Kalender
Kalenderkennung Kalender
Bu Buddhistisch
Ch Chinesisch
Gr Gregorianisch
He Hebräisch
Is Islamisch
Ja Japanisch

Die Thematik kann schnell komplex werden, weil lokalisierte Datumszeichenfolgen in verschiedenen Kalendersystemen möglicherweise bei anderen Ländereinstellungen nicht ausgegeben werden können. Verschiedene Kalender nutzen unterschiedliche Ausgangspunkte für die Jahreszählung und verschiedene Bezeichnungen für Epochen. Viele von ihnen werden nur in entsprechend lokalisierten Umgebungen richtig angezeigt. Beispiel: In der japanischen Zeitrechnung sind Datumsangaben zum einen auf die Regierungszeiten japanischer Kaiser bezogen, zum anderen aber auch auf den alten julianischen Kalender (der eine Differenz um wenige Tage zum gregorianischen Kalender aufweist und diesem nachläuft).

Das folgende Codefragment zeigt eine Möglichkeit, wie Datumsangaben vom gregorianischen in den japanischen Kalender konvertiert werden können:
myDate DATE;
myJapaneseDate STRING;

strLib.defaultDateFormat = "Gryyyy/MM/dd";
myDate = "1912/08/13";
myJapaneseDate = formatDate(myDate,"JaGyy/MM/dd");
Wenn Ihr System für Japan lokalisiert ist, können Sie strLib.defaultDateFormat so einstellen, dass der japanische Kalender verwendet wird, und Sie können myDate auf ein japanisches Kalenderdatum einstellen. EGL parst die Datumszeichenfolge entsprechend dem Standarddatumsformat und speichert sie als achtstelliges gregorianisches Datum.

Die folgende Tabelle enthält Beispiele für gregorianische Datumswerte, die in das oben angegebene Format der japanischen Zeitrechnung konvertiert wurden. Die Namen in eckigen Klammern geben die vier Doppelbytezeichen für eine bestimmte japanische Epoche an.

Tabelle 2.
Gregorianisches Datum Datum nach japanischer Zeitrechnung
1868/09/20 [Meiji]01/09/08
1912/08/12 [Meiji]45/07/30
1912/08/13 [TaishÅ?]01/07/31
1927/01/07 [TaishÅ?]15/12/25
1927/01/08 [ShÅ?wa]01/12/26
1989/01/20 [ShÅ?wa]64/01/07
1989/01/21 [Heisei]01/01/08
2005/01/14 [Heisei]17/01/01

EGL verwendet die Java™-Version der International Components for Unicode-Bibliotheken (ICU4J), um die erforderlichen Datumskonvertierungen für Eingabe und Anzeige vorzunehmen. EGL speichert die Datumsangaben aber immer im gregorianischen Format (achtstellig). Wenn eine thailändische Anwendung ein Datum im buddhistischen Kalender abruft, speichert EGL dieses Datum im achtstelligen gregorianischen Format - die Konvertierung erfolgt mithilfe von ICU4J. Solange die Anwendung in den Mustern, die sie verwendet, konsistent ist, bleibt dieser Prozess für Programmierer und Benutzer unsichtbar.

Kompatibilität

Tabelle 3. Überlegungen zur Kompatibilität für Datums-/Zeitformate
Plattform Problem
COBOL-Generierung
  • Beim TIMESTAMP-Format können nur aufeinanderfolgende Komponenten angegeben werden. Beispielsweise können Sie Monat und Tag angeben, aber nicht Monat und Stunde.
  • Sie können Millisekunden (ffffff) angeben, aber nur die ersten beiden Bytes werden eingestellt, wenn die Systemzeit abgerufen wird. Die übrigen Bytes in der Millisekunde werden auf 0 eingestellt.
  • Für die Verwendung des Formatierungsmusters W und w unterstützt die COBOL-Generierung den Standard ISO 8601 nicht und stellt keine ISO 8601-Ergebnisse zur Verfügung. Möglicherweise sind die Ergebnisse nicht mit der Java-Generierung und dem Debugger konsistent.
DB2 Siehe Eintrag "COBOL-Generierung" in dieser Tabelle.
Rich-UI Siehe Datums- und Zeitunterstützung für Rich-UI.

Feedback