Datums-/Zeitmasken und Formatkennungen
- Wenn Sie eine TIMESTAMP- oder INTERVAL-Variable deklarieren, können Sie eine Maske angeben, um das interne Format der Variablen zu definieren. EGL hält die Maskeninformationen bei dem Wert der Variablen. (EGL speichert DATE-Variablen immer im Format yyyyMMdd und TIME-Variablen im Format HHmmss.)
- Wenn Sie eine Zeichenfolge verwenden, um einer Datums-/Zeitvariablen einen Wert zuzuordnen, verwenden Sie ein Parsing-Format.
- Wenn Sie den internen Wert einer Datums-/Zeitvariablen anzeigen oder drucken, verwenden Sie ein Anzeigeformat.
Weitere Informationen zu den internen Werten dieser Variablen finden Sie unter "Primitive-Datentypen".
INTERVAL-Maske erstellen
- 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.
- 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.
yyyyyyMM
yyyyyy
MM
ddHHmmssffffff
HHmmssff
mmss
HHmm
// NICHT gültig
ddmmssffffff
HHssff
TIMESTAMP-Maske erstellen
- 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.
- 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
- 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.
- strLib.formatDate()
- strLib.formatTime()
- strLib.formatTimestamp()
- 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.
| 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).
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.
| 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
| Plattform | Problem |
|---|---|
| COBOL-Generierung |
|
| DB2 | Siehe Eintrag "COBOL-Generierung" in dieser Tabelle. |
| Rich-UI | Siehe Datums- und Zeitunterstützung für Rich-UI. |