Formattazione ed analisi di dateTimes come stringhe
Questa sezione fornisce informazioni relative al modo in cui è possibile specificare il formato dateTime utilizzando una stringa di lettere di modello.
Quando si converte una data o un ora in una stringa, è necessario applicare un modello di formato per indirizzare la conversione. Applicare il modello di formato per convertire una data o un'ora in una stringa o per analizzare una stringa in una data o un ora.
Durante la conversione (ad esempio, di un valore data/ora in una stringa), un modello o una serie di token verranno sostituiti con l'origine equivalente. Il diagramma seguente mostra il modo in cui un modello viene utilizzato per formattare una origine data/ora per produrre un output di stringa di carattere.

Quando una stringa viene analizzata (ad esempio, quando si converte la stringa in un valore data/ora) il modello o la serie di token viene utilizzata per determinare quale parte del valore data/ora di destinazione verrà rappresentata da una parte della stringa. Il diagramma seguente mostra il modo i cui viene eseguita questa operazione.

Sintassi
Il modello di espressione viene definito con la modalità riportata di seguito:
Caratteri di formattazione di una data/ora come stringa
Nella tabella seguente sono elencati i caratteri che è possibile utilizzare in un modello per la formattazione o l'analisi delle stringhe in relazione a un valore data/ora. Dopo la tabella vengono fornite alcune note che illustrano alcuni degli esempi nella tabella.
| Simbolo | Significato | Presentazione | Esempi |
|---|---|---|---|
| a | indicatore am o pm | Testo | am di input, AM, pm, PM. AM o PM di output. |
| d | giorno del mese (1-31) | Numero | 1, 20 |
| gg | giorno del mese (01-31) | Numero | 01, 31 |
| D | giorno dell'anno (1-366) | Numero | 3, 80, 100 |
| GG | giorno dell'anno (01-366) | Numero | 03, 80, 366 |
| GGG | giorno dell'anno (001-366) | Numero | 003 |
| e | giorno della settimana (1-7)1 | Numero | 2 |
| GGG | giorno della settimana1 | Testo | Mar |
| EEE | giorno della settimana1 | Testo | Martedì |
| F | giorno settimanale del mese (1-5)2 | Numero | 2 |
| G | Era | Testo | AC o DC |
| h | ora in am o pm (1-12) | Numero | 6 |
| hh | ora in am o pm (01-12) | Numero | 06 |
| H | ora del giorno nel formato di 24 ore (0-23)3 | Numero | 7 |
| OO | ora del giorno nel formato di 24 ore (00-23)3 | Numero | 07 |
| I | ISO8601 data/ora (fino a yyyy-MM-dd'T'HH:mm:ss. SSSZZZ)4 | Testo | 2006-10-07T12:06:56.568+01:00 |
| IU | ISO8601 Data/ora (simile I, ma ZZZ con l'output "Z" se il fuso orario è +00:00)4 | Testo | 2006-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z |
| k | ora del giorno in formato di 24 ore (1-24)3 | Numero | 8 |
| kk | ora del giorno in formato di 24 ore (01-24)3 | Numero | 08 |
| K | ora in am o pm (0-11) | Numero | 9 |
| KK | ora in am o pm (00-11) | Numero | 09 |
| m | minuto | Numero | 4 |
| mm | minuto | Numero | 04 |
| M | mese in formato numerico | Numero | 5, 12 |
| MI | mese in formato numerico | Numero | 05, 12 |
| MMM | mese in formato nome | Testo | Gen, feb |
| MMM | mese in formato nome | Testo | Gennaio, febbraio |
| s | secondi10 | Numero | 5 |
| ss | secondi10 | Numero | 05 |
| S | decimi di secondo5 | Numero | 7 |
| SS | centesimi di secondo5 | Numero | 70 |
| SSS | millesimi di secondo5 | Numero | 700 |
| SSSS | 0,0001 secondi5 | Numero | 7000 |
| SSSSS | 0,00001 secondi5 | Numero | 70000 |
| SSSSSS | 0,000001 secondi5 | Numero | 700000 |
| T | ISO8601 Ora (fino a HH:mm:ss.SSSZZZ)4 | Testo | 12:06:56.568+01:00 |
| TU | ISO8601 Ora (simile a T, ma un fuso orario di +00:00 è sostituito da 'Z')4 | Testo | 12:06:56.568+01:00, 15:42:12.000Z |
| w | settimana nell'anno6 | Numero | 7, 53 |
| ww | settimana nell'anno6 | Numero | 07, 53 |
| W | settimana del mese7 | Numero | 2 |
| aa | anno8 | Numero | 06 |
| aaaa | anno8 | Numero | 2006 |
| AA | anno: utilizzare solo con settimana dell'anno6 | Numero | 06 |
| AAAA | anno: utilizzare solo con settimana dell'anno6 | Numero | 2006 |
| zzz | fuso orario (abbreviazione)9 | Testo | EST |
| zzzz | fuso orario (nome completo) | Testo | Ora solare fuso Orientale |
| Z | fuso orario (+/-n) | Testo | +3 |
| IT | fuso orario (+/-nn) | Testo | +03 |
| ZZZ | fuso orario (+/-nn:nn) | Testo | +03:00 |
| ZZZU | fuso orario (come per ZZZ, ma "+00:00" è sostituito da "Z") | Testo | +03:00, Z |
| ZZZZ | fuso orario (GMT+/-nn:nn) | Testo | GMT+03:00 |
| ZZZZZ | fuso orario (come per ZZZ, ma senza virgola) (+/-nnnn) | Testo | +0300 |
| ' | testo in sequenza Escape | 'Testo utente' | |
| " | (due virgolette singole) una virgoletta singola tra testo con carattere di escape | 'ora precisa' |
La presentazione dell'oggetto data/ora dipende dai simboli specificati.
- Testo. Se si specificano quattro o più simboli, viene visualizzato
il formato completo. Se vengono specificati meno di quattro simboli, viene presentata la forma
abbreviata o ridotta, se esiste. Ad esempio,
EEEEproduceMonday,EEEproduceMon. - Numero. Il numero di caratteri per un componente
dateTime numerico deve essere nei limiti dei simboli di formattazione
corrispondenti. Ripetere il simbolo per specificare il numero minimo di cifre richieste. Il numero massimo di cifre consentite
sarà il limite massimo per un determinato simbolo. Ad esempio,
day in monthha un limite superiore di 31; pertanto, una stringa di formatodconsente l'analisi dei valori 2 o 21, ma non consente i valori 32 e 210. Nell'output, vengono aggiunti degli zero fino alla lunghezza specificata. Per l'anno, fare riferimento alla nota 8 nell'elenco seguente, poiché rappresenta un caso speciale. Per le frazioni di secondo, fare riferimento alla nota 5 nel seguente elenco. - Tutti i caratteri nel modello non compresi tra ['a'..'z'] e ['A'..'Z'] sono considerati come testo tra apici. Ad esempio, i caratteri come i due punti (:), la virgola (,), il punto (.), il cancelletto (#), la chiocciola (@) e lo spazio vengono visualizzati nel testo risultante anche se non sono racchiusi tra apici.
- È possibile creare stringhe formato con risultati non previsti ed è pertanto
necessario prestare la massima attenzione durante l'utilizzo dei simboli. Ad esempio, se si
specifica
dMyyyy, è impossibile distinguere tra il giorno, il mese e l'anno.dMyyyyindica al nodo di integrazione che un minimo di un carattere rappresenta il giorno, un minimo di un carattere rappresenta il mese e quattro caratteri rappresentano l'anno. Di conseguenza,3111999può essere interpretato come 3/11/1999 o come 31/1/1999.
- È possibile specificare i seguenti valori nel campo
day in week:- 1 - Domenica
- 2 - Lunedì
- 3 - Martedì
- 4 - Mercoledì
- 5 - Giovedì
- 6 - Venerdì
- 7 - Sabato
- il 12 luglio 2006 è il secondo mercoledì di luglio e può essere espresso come
2006 July Wednesday 2utilizzando la stringa di formatoyyyy MMMM EEEE F. Si noti che questo formato non rappresenta il mercoledì della seconda settimana di luglio 2006, che è il 5 luglio 2006; la stringa di formato per questo èyyyy MMMM EEEE W. - È possibile che nei campi relativi al formato 24 ore risulti un'ora ambigua se viene specificata con un campo am/pm conflittuale.
- Vedere ISO8601, I e T DateTime token.
- I secondi frazionari sono rappresentati da S. maiuscolo La lunghezza deve corrispondere implicitamente al numero di simboli di formato sull'input. Le stringhe di formato
ss SSSoss.SSS, ad esempio, rappresentano secondi e millesimi di secondo. Tuttavia, la stringa di formatoss.sssrappresenta un campo ripetuto (di secondi); il valore dopo il punto (.) è preso come un campo secondi, non come secondi frazionari. L'output è troncato alla lunghezza specificata. - In ESQL, il primo giorno dell'anno è considerato essere nella prima
settimana, per cui il giorno 1 gennaio è sempre nella settimana 1. Di conseguenza, le date specificate relative a un anno potrebbero essere in un anno diverso. Ad esempio, "Lunedì settimana 1 2005" analizzato utilizzando "
EEEE' week 'w' 'YYYY" fornisce una data 2004-12-27, perché il lunedì della prima settimana del 2005 è una data del 2004.Se si utilizza il simbolo
y, l'aggiustamento non viene eseguito e si potrebbero verificare risultati imprevedibili per le date nella parte finale dell'anno. Ad esempio, se la stringa "2005 01 Lunedì" ha il formato:- Il lunedì della settimana 1 del 2005, utilizzando la stringa di formato "
YYYY ww EEEE", viene interpretato correttamente come 27 dicembre 2004 - Il lunedì della settimana 1 del 2005 utilizzando la stringa di formato "
yyyy ww EEEE" viene interpretato erroneamente come 27 dicembre 2005
- Il lunedì della settimana 1 del 2005, utilizzando la stringa di formato "
- È possibile che la prima e l'ultima settimana di un mese includano giorni
del mese successivo o precedente. Ad esempio, lunedì 31 luglio 2006 può essere espresso come lunedì della prima settimana di agosto 2006, ovvero
2006 08 1 Mondayutilizzando la stringa di formatoyyyy MM W EEEE. - L'anno è considerato un caso speciale.
- Nell'output, se il conteggio di
yè2, l'anno è troncato a 2 cifre. Ad esempio, se conyyyyviene prodotto1997, conyyviene prodotto97. - Nell'input, per gli anni composti da 2 cifre, la Finestra secolo è fissata su 53. Ad esempio, la data di input 52 ha come risultato il valore dell'anno 2052, mentre 53 fornisce l'anno di output 1953 e 97 restituisce 1997.
- Nell'output, se il conteggio di
- Utilizzando l'opzione
zzzè possibile che si ottengano risultati ambigui. Ad esempio,BSTpuò essere interpretato comeBangladesh Standard TimeoBritish Summer Time. Per motivi di compatibilità, IBM® Integration Bus utilizza la precedente interpretazione.Per evitare il problema, utilizzare l'opzione
zzzzcon un nome ben definito quale, ad esempio, Europa/Londra, Asia/Dacca o America/Los_Angeles. - I secondi
s&ssdevono essere compresi nell'intervallo 0-59. Se è necessario creare un TIMESTAMP che rappresenti l'ora durante un secondo bisestile, in cui il valore creato o il cast utilizza il valore 60 per secondi, è necessario gestire questo caso all'interno del codice ESQL. Le funzioni CURRENT_ datetime (ad esempio, CURRENT_TIME) all'interno del prodotto non producono mai un tempo in cui il valore dei secondi non rientra nell'intervallo compreso tra 0 e 59.
ISO8601, token I e T data/ora
Se i valori data/ora sono compatibili con lo standard ISO8601:2000 'Rappresentazione di date e ore', valutare la possibilità di utilizzare i simboli di formattazione I e T, che corrispondono alla serie secondaria dello standard ISO8601.
- Il profilo limitato come proposto da W3C all'indirizzo http://www.w3.org/TR/NOTE-datetime
- Le rappresentazioni troncate delle date del calendario, come specificato nella sezione 5.2.1.3
di ISO8601:2000
- Formato di base (sottosezioni c, e ed f)
- Formato esteso (sottosezioni a, b e d)
Utilizzare i simboli di formattazione I e T solo da soli:
- Il simbolo di formattazione I corrisponde a una stringa data/ora qualsiasi in conformità con la serie secondaria supportata.
- Il simbolo di formattazione T corrisponde a qualsiasi stringa data/ora che sia conforme alla serie secondaria supportata formata solo da una parte relativa all'ora.
La tabella seguente mostra il modo in cui il formato di output è in relazione con il tipo dati logici.
| Tipo dati del modello logico | tipo dati ESQL | Modulo di output |
|---|---|---|
| xsd:dateTime | TIMESTAMP o GMTTIMESTAMP | aaaa-MM-dd'T'HH:mm:ss.SSSZZZ |
| xsd:date | DATA | aaaa-MM-gg |
| xsd:gYear | INTERVALLO | aaaa |
| xsd:gYearMonth | INTERVALLO | aaaa-MM |
| xsd:gMonth | INTERVALLO | --MM |
| xsd:gmonthDay | INTERVALLO | --MM-dd |
| xsd:gDay | INTERVALLO | ---dd |
| xsd:time | TIME / GMTTIME | 'T'HH:mm:ss.SSSZZZ |
- Nell'input, entrambi I e T accettano sia '+00:00' che 'Z' per indicare una differenza oraria pari a zero dal fuso orario UTC (Coordinated Universal Time), ma nell'output verrà sempre generato il valore '+00:00'. Per consentire sempre la creazione di 'Z' all'output, utilizzare i simboli di formattazione IU o TU.
- Il valore ZZZ viene riportato sempre con '+00:00', per indicare una differenza oraria pari a zero dal fuso orario UTC (Coordinated Universal Time). Per consentire sempre la creazione di 'Z' all'output, utilizzare invece ZZZU.
Utilizzo del formato UTC di input nell'output
Un elemento o un attributo di tipo logico xsd:dateTime o xsd:time che contiene un valore dateTime sotto forma di stringa può specificare il valore UTC utilizzano il simbolo Z o il fuso orario +00:00. Nell'input nel programma di analisi MRM è memorizzato il formato UTC di tali elementi e attributi. Nell'output, è possibile specificare se visualizzare Z o +00:00 utilizzando la proprietà Formato data/ora predefinito dell'elemento o dell'attributo. In alternativa, è possibile mantenere il formato UTC di input selezionando la proprietà della serie di messaggi Utilizza il formato UTC di input nell'output. Se questa proprietà è selezionata, il formato UTC viene mantenuto nel messaggio di output e sovrascrive il formato specificato dalla proprietà del formato data/ora.
Introduzione alla funzione CAST e a DST (daylight saving time)
Quando il nodo di integrazione è in esecuzione in un fuso orario diverso da GMT, calcola l'offset DST (daylight saving time) sugli orari forniti dalla funzione CAST. Affinché CAST possa calcolare correttamente l'offset, è necessario associare un fuso orario all'ora inoltrata a CAST, come parametro Z. Se non viene associato alcun fuso orario al valore inoltrato, l'ora viene convertita in ora GMT e non viene considerata un'ora locale.
Inoltre, quando si utilizza CAST per eseguire il casting di una stringa in un valore temporale, l'offset DST viene calcolato utilizzando la data di sistema corrente. Per eseguire il casting di una stringa in una variabile temporale e calcolare il DST per una specifica data, è necessario specificare tale data.
DECLARE castTime TIME;
SET castTime = CAST (timeValue AS TIME FORMAT timePattern)L'ora non viene convertita nuovamente
in GMT se si utilizza la variabile castTime in qualsiasi codice successivo, ad esempio:CAST(castDate, castTime AS GMTTIMESTAMP);Esempi
La tabella seguente mostra alcuni esempi dei formati data/ora.
| Modello di formato | Risultato |
|---|---|
| "aaaa.MM.dd 'a' HH:mm:ss ZZZ" | 2006.07.10 a 15:08:56 -05:00 |
| "EEE, MMM d, "yy" | Mer, 10 luglio '06 |
| "h:mm a" | 20:08 |
| "hh o"clock a, ZZZZ" | 09:00, GMT+09:00 |
| "K:mm a, ZZZ" | 9:34, -05:00 |
| "aaaa.MMMMM.dd hh:mm aaa" | 10.luglio.1996 12:08 |
Utilizzo all'interno di un dominio MRM
In MRM è possibile definire un elemento con il tipo logico dateTime.
Durante l'analisi di un elemento dateTime (data/ora), viene creato un campo nella struttura ad albero dei messaggi con il tipo di dati ESQL CURRENT_TIME o CURRENT_TIMESTAMP. Tuttavia, i tipi di dati CURRENT_TIME e CURRENT_TIMESTAMP non dispongono della funzionalità per memorizzare le informazioni sul fuso orario e l'MRM non regola l'ora in base al fuso orario di input e al fuso orario del nodo di integrazione.
Benché i tipi di dati CURRENT_TIME e CURRENT_TIMESTAMP non possano memorizzare informazioni sul fuso orario, MRM memorizza queste informazioni come parte del campo sottostante. Ciò significa che se il campo viene copiato da una strutture ad albero dei messaggi ad un'altra, vengono copiate anche le informazioni sul fuso orario, consentendo la conservazione delle informazioni nell'output.
Notare che le informazioni vengono mantenute solo se il campo viene copiato in un campo omonimo.
Tuttavia, se il nuovo campo viene derivato da quello originale, perde le informazioni sul fuso orario. Ciò significa che se tale campo viene interpretato come un carattere, il nuovo campo assume il fuso orario del nodo di integrazione, ma il suo valore non viene regolato per alcuna differenza tra il fuso orario di input e il fuso orario del nodo di integrazione.
Ad
esempio, un elemento dateTime di input contenente 2009-02-20T06:08:07-08:00 potrebbe
essere copiato dalla struttura ad albero dei messaggi di input a quella di output ed
essere visualizzata in messaggio di output con lo stesso identico formato. Tuttavia, se l'elemento viene interpretato come carattere, utilizzando il formato IU, da un nodo di integrazione che esegue GMT, il risultato sarà 2009-02-20T06:08:07.000Z.
