In diesem Abschnitt erfahren Sie, wie Sie das dateTime-Format mithilfe einer Zeichenfolge von Musterbuchstaben festlegen.
Bei der Umwandlung eines Datums oder einer Uhrzeit in eine Zeichenfolge muss ein Formatmuster angewendet werden, über das die Umwandlung gesteuert wird. Verwenden Sie dieses Formatmuster entweder für die Umwandlung eines Datums oder einer Uhrzeit in eine Zeichenfolge oder für die Auswertung einer Zeichenfolge zur Umwandlung in ein Datum oder eine Uhrzeit.
Während der Konvertierung (z. B. eines Datum/Zeit-Formats in eine Zeichenfolge) wird ein Muster oder eine Gruppe von Tokens durch die entsprechende Quelle ersetzt. Aus dem nachfolgenden Diagramm geht hervor, wie ein Muster zum Formatieren einer Datum/Zeit-Quelle verwendet wird, um eine Zeichenfolgeausgabe zu erzeugen.
Beim Auswerten einer Zeichenfolge (z. B. bei der Umwandlung der Zeichenfolge in ein Datum/Zeit-Format) wird das Muster oder die Gruppe von Tokens verwendet, um zu ermitteln, welcher Teil des Datum/Zeit-Zielformats durch welchen Teil der Zeichenfolge dargestellt wird. Im folgenden Diagramm wird gezeigt, wie das funktioniert.
Das Ausdrucksmuster wird wie folgt definiert:
.------------------. V | >>---+-Symbol-------+-+---------------------------------------->< '-Zeichenfolge-'
In der folgenden Tabelle sind die Zeichen aufgelistet, die in einem Muster zur Formatierung bzw. Auswertung von Zeichenfolgen für ein Datum/Zeit-Format verwendet werden können. Nach der Tabelle folgen einige Anmerkungen, die weitere Informationen zu den Beispielen in der Tabelle enthalten.
Symbol | Bedeutung | Darstellung | Beispiele |
---|---|---|---|
a | Kennzeichnung für Vormittag (AM) oder Nachmittag (PM) | Text | Eingabe: am, AM, pm, PM. Ausgabe: AM oder PM |
d | Tag in Monat (1-31) | Nummer | 1, 20 |
dd | Tag in Monat (01-31) | Nummer | 01, 31 |
D | Tag in Jahr (1-366) | Nummer | 3, 80, 100 |
DD | Tag in Jahr (01-366) | Nummer | 03, 80, 366 |
DDD | Tag in Jahr (001-366) | Nummer | 003 |
e | Tag in Woche (1-7)1 | Nummer | 2 |
EEE | Tag in Woche1 | Text | Di |
EEEE | Tag in Woche1 | Text | Dienstag |
F | Wochentag in Monat (1-5)2 | Nummer | 2 |
G | Jahrhundert | Text | v. Chr oder n. Chr |
h | Stunde in AM oder PM (1-12) | Nummer | 6 |
hh | Stunde in AM oder PM (01-12) | Nummer | 06 |
H | Stunde des Tages im 24-Stunden-Format (0-23)3 | Nummer | 7 |
HH | Stunde des Tages im 24-Stunden-Format (00-23)3 | Nummer | 07 |
I | ISO8601 Datum/Zeit (bis jjjj-MM-tt'T'HH:mm:ss.SSSZZZ)4 | Text | 2006-10-07T12:06:56.568+01:00 |
IU | ISO8601 Datum/Zeit (ähnlich wie I, aber ZZZ mit Ausgabe "Z", wenn die Zeitzone +00:00 ist)4 | Text | 2006-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z |
k | Stunde des Tages im 24-Stunden-Format (1-24)3 | Nummer | 8 |
kk | Stunde des Tages im 24-Stunden-Format (01-24)3 | Nummer | 08 |
K | Stunde in AM oder PM (0-11) | Nummer | 9 |
KK | Stunde in AM oder PM (00-11) | Nummer | 09 |
m | Minute | Nummer | 4 |
mm | Minute | Nummer | 04 |
M | Monatszahl | Nummer | 5, 12 |
MM | Monatszahl | Nummer | 05, 12 |
MMM | Monatsname | Text | Jan, Feb |
MMMM | Monatsname | Text | Januar, Februar |
s | Sekunden | Nummer | 5 |
ss | Sekunden | Nummer | 05 |
S | Dezisekunde5 | Nummer | 7 |
SS | Hundertstelsekunde5 | Nummer | 70 |
SSS | Millisekunde5 | Nummer | 700 |
SSSS | 0,0001 Sekunde5 | Nummer | 7000 |
SSSSS | 0,00001 Sekunde5 | Nummer | 70000 |
SSSSSS | 0,000001 Sekunde5 | Nummer | 700000 |
T | ISO8601 Uhrzeit (bis HH:mm:ss.SSSZZZ)4 | Text | 12:06:56.568+01:00 |
TU | ISO8601 Uhrzeit (ähnlich wie T, aber Zeitzone +00:00 wird durch 'Z' ersetzt)4 | Text | 12:06:56.568+01:00, 15:42:12.000Z |
w | Woche in Jahr6 | Nummer | 7, 53 |
ww | Woche in Jahr6 | Nummer | 07, 53 |
W | Woche in Monat7 | Nummer | 2 |
yy | Jahr8 | Nummer | 06 |
yyyy | Jahr8 | Nummer | 2006 |
YY | Jahr: nur mit Woche in Jahr verwenden6 | Nummer | 06 |
YYYY | Jahr: nur mit Woche in Jahr verwenden6 | Nummer | 2006 |
zzz | Zeitzone (abgekürzter Name)9 | Text | EST |
zzzz | Zeitzone (vollständiger Name) | Text | Eastern Standard Time |
Z | Zeitzone (+/-n) | Text | +3 |
ZZ | Zeitzone (+/-nn) | Text | +03 |
ZZZ | Zeitzone (+/-nn:nn) | Text | +03:00 |
ZZZU | Zeitzone (wie ZZZ, "+00:00" wird durch "Z" ersetzt) | Text | +03:00, Z |
ZZZZ | Zeitzone (GMT+/-nn:nn) | Text | GMT+03:00 |
ZZZZZ | Zeitzone (wie ZZZ, aber ohne Doppelpunkt) (+/-nnnn) | Text | +0300 |
' | Auslassung für Text | 'Benutzertext' | |
" | (zwei einfache Anführungszeichen) einfaches Anführungszeichen in Text mit Escapezeichen | 'o"clock' |
Die Darstellung des Datum/Zeit-Objekts richtet sich danach, welche Symbole Sie festlegen.
Wenn Sie das y-Symbol verwenden, wird keine Anpassung ausgeführt. Für Daten um das Jahresende herum könnten unvorhersehbare Ergebnisse auftreten. Die Zeichenfolge "2005 01 Montag" ist beispielsweise wie folgt formatiert:
Um diese Probleme zu vermeiden, verwenden Sie die Option zzzz mit einem klar strukturierten Namen, beispielsweise Europa/London, Asien/Dhaka oder Amerika/Los_Angeles.
Wenn Ihre Werte für Datum/Zeit dem ISO8601:2000-Standard zur 'Darstellung von Datum und Uhrzeit' entsprechen, sollten Sie die Verwendung der Formatierungssymbole I und T in Erwägung ziehen, die der folgenden Teilmenge des ISO8601-Standards entsprechen.
Verwenden Sie die Formatierungssymbole I und T nur eigenständig:
Die folgende Tabelle zeigt, wie sich das Ausgabeformat auf den logischen Datentyp bezieht.
Logischer Modelldatentyp | ESQL-Datentyp | Ausgabeformat |
---|---|---|
xsd:dateTime | TIMESTAMP oder GMTTIMESTAMP | jjjj-MM-tt'T'HH:mm:ss.SSSZZZ |
xsd:date | DATE | jjjj-MM-tt |
xsd:gYear | INTERVAL | yyyy |
xsd:gYearMonth | INTERVAL | jjjj-MM |
xsd:gMonth | INTERVAL | --MM |
xsd:gmonthDay | INTERVAL | --MM-dd |
xsd:gDay | INTERVAL | ---dd |
xsd:time | TIME / GMTTIME | 'T'HH:mm:ss.SSSZZZ |
Ein Element oder Attribut des logischen Typs xsd:dateTime oder xsd:time, das eine Datum/Zeit-Angabe als Zeichenfolge enthält, kann die UTC-Zeit (Coordinated Universal Time) angeben, indem entweder das Symbol Z oder Zeitzone +00:00 verwendet wird. Bei der Eingabe erkennt der MRM-Parser das UTC-Format solcher Elemente und Attribute. Bei der Ausgabe können Sie über die Eigenschaft Standardformat für Datum/Zeit verwenden des Elements oder Attributs angeben, ob Z oder +00:00 angezeigt wird. Alternativ können Sie das UTC-Eingabeformat beibehalten, indem Sie die Nachrichtensatzeigenschaft Benutzen Sie das UTC-Format der Eingabe für die Ausgabe auswählen. Wenn diese Eigenschaft ausgewählt ist, wird das UTC-Format unverändert in die Ausgabenachricht übernommen und überschreibt das durch die Datum/Zeit-Formateigenschaft implizierte Format.
Wenn der Broker in einer anderen Zeitzone als GMT (Greenwich Mean Time, Westeuropäische Zeit) ausgeführt wird, berechnet er den Sommerzeit-Ausgleich auf Basis der an ihn durch die CAST-Funktion übergebenen Zeiten. Damit der Ausgleich von CAST richtig berechnet wird, muss der an CAST übergebenen Zeit eine Zeitzone als Z-Parameter übergeben werden. Wenn dem übergebenen Wert keine Zeitzone zugeordnet ist, wird die Zeit in GMT-Zeit konvertiert; sie wird nicht als lokale Zeitmarke behandelt.
Wenn Sie außerdem mit CAST eine Zeichenfolge in einen Zeitwert umsetzen, wird der DST-Ausgleich mit dem aktuellen Systemdatum berechnet. Wenn Sie eine Zeichenfolge in eine Zeitvariable umsetzen und die Sommerzeit für ein bestimmtes Datum berechnen möchten, müssen Sie auch das Datum angeben.
DECLARE castTime TIME;
SET castTime = CAST (timeValue AS TIME FORMAT timePattern)
Die Zeit wird nicht erneut in GMT konvertiert, wenn die castTime-Variable in einem nachfolgenden Code verwendet wird. Beispiel: CAST(castDate, castTime AS GMTTIMESTAMP);
Die folgende Tabelle enthält Beispiele für Datum/Zeit-Formate.
Formatmuster | Ergebnis |
---|---|
"yyyy.MM.dd 'um' HH:mm:ss ZZZ" | 2006.07.10 um 15:08:56 -05:00 |
"EEE, MMM d, "yy" | Mit, Juli 10, '06 |
"h:mm a" | 8:08 PM |
"hh Uhr" a, ZZZZ" | 09 Uhr AM, GMT+09:00 |
"K:mm a, ZZZ" | 9:34 AM, -05:00 |
"yyyy.MMMMM.dd hh:mm aaa" | 1996.Juli.10 12:08 PM |
In MRM kann ein Element, das den logischen Typ 'dateTime' aufweist, definiert werden.
Bei der Syntaxanalyse eines dateTime-Elements wird in der Nachrichtenbaumstruktur ein Feld erstellt, das den ESQL-Datentyp CURRENT_TIME oder CURRENT_TIMESTAMP aufweist. Die Datentypen CURRENT_TIME und CURRENT_TIMESTAMP verfügen jedoch nicht über de Funktionalität zum Speichern von Zeitzoneninformationen und der MRM stellt die Zeit nicht in Übereinstimmung mit der Empfangszeitzone und der Zeitzone des Brokers ein.
Obwohl die Datentypen CURRENT_TIME und CURRENT_TIMESTAMP die Zeitzoneninformationen niciht speichern können, werden sie vom MRM als Teil des zugrunde liegenden Felds gespeichert. Wenn das Feld also zwischen den Nachrichtenbaumstrukturen kopiert wird, werden die Zeitzoneninformationen dabei ebenfalls kopiert, damit diese Informationen bei der Ausgabe zur Verfügung stehen.
Beachten Sie, dass die Informationen nur erhalten bleiben, wenn das Feld in ein gleichnamiges Feld kopiert wird.
Wenn jedoch ein neues Feld vom alten Feld abgeleitet wird, verfügt das neue Feld nicht über die Zeitzoneninformationen. Wenn ein derartiges Feld also als Zeichen umgesetzt wird, geht das neue Feld von der Zeitzone des Brokers aus, sein Wert wird jedoch nicht entsprechend angepasst, wenn Unterschiede zwischen der Empfangszeitzone und der Zeitzone des Brokers bestehen.
Ein dateTime-Empfangselement, das 2009-02-20T06:08:07-08:00 enthält, könnte beispielsweise aus der Eingabenachrichtenstruktur in die Ausgabenachrichtenstruktur kopiert werden und mit genau diesem Format in einer Ausgabenachricht angezeigt werden. Wenn das Element jedoch von einem Broker, auf dem GMT (Greenwich Mean Time, Westeuropäische Zeit) gilt, als Zeichen mit dem Format IU umgesetzt wird, würde das Ergebnis wie folgt aussehen: 2009-02-20T06:08:07.000Z.