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.

Tabella 1. Esempi di struct tm e delle proprietà del 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++.