Supporto per le strutture temporali struct tm
Oltre a supportare time_t, l'API di aiuto ai tipi di dati supporta anche la comune struttura struct tm del C++. I valori di Data e Timestamp possono essere convertiti in un tm; tuttavia, i valori di Ora e TimeTz non possono essere convertiti perché non contengono informazioni sulla data.
L'API utilizza l'implementazione rigorosa della struct tm, che non contiene i campi aggiuntivi tm_zone e tm_gmtoff, comunemente utilizzati in GCC. L'implementazione rigorosa è necessaria per garantire la coerenza tra le librerie C++ dell'host e della SPU. L'API fornisce funzioni per le conversioni tra la struct tm e i tipi di dati Date e Timestamp di Netezza Performance Server. Poiché la struct tm utilizza più campi di quelli necessari per memorizzare le informazioni relative alla data o al timestamp, alcuni campi vengono ignorati dalla conversione. La tabella seguente elenca le mappature tra i campi tm e le loro controparti di tipo di dati Netezza Performance Server.
| campi della struct tm | Dati utilizzati da NZ DATE | Dati utilizzati da NZ TIMESTAMP |
|---|---|---|
| tm_sec (0 - 61) | Ignorato | Secondi (0 - 59) |
| tm_min (0 - 59) | Ignorato | Minuti |
| tm_ora (0 - 23) | Ignorato | Ore |
| tm_mday (1 - 31) giorno del mese | Giorno | Giorno |
| tm_mon (0 - 11) mesi da gennaio | Mese | Mese |
| tm_anno dal 1900 | Anno | Anno |
| tm_wday (0 - 6) giorno della settimana | Giorno della settimana | Giorno della settimana |
| tm_yday (0 - 365) giorno dell'anno | Anno Giorno | Anno Giorno |
| tm_isdst flag per l'ora legale | Impostare su -1 | Impostare su -1 |
Per le conversioni da e verso struct tm, Netezza Performance Server non utilizza né supporta i secondi bisestili. Pertanto, i secondi della struct tm che vengono scritti dall'API non superano mai i 59 campi. Se viene chiamata una routine di conversione con una struct tm contenente un campo 60 o 61 tm_sec, l'API lancia un errore.
Quando si codifica da un formato struct tm, i campi ignorati possono contenere qualsiasi dato. Quando si decodifica una struct tm, i campi ignorati hanno valore zero.
Il flag tm_isdst viene ignorato in ingresso e viene impostato a -1 per "unknown" in uscita. L'impostazione di tm_isdst a -1 non rientra nello standard, ma è una pratica tipica del settore. Per il resto, l'API è conforme a tutte le specifiche time_t elencate nello standard ANSI C++.