Soporte para estructuras temporales struct tm
Además de dar soporte a time_t, la API de ayuda del tipo de datos también admite la estructura común de C++, struct tm. Los valores Date y Timestamp pueden convertirse a un tm; sin embargo, los valores Time y TimeTz no pueden porque no hay información de fecha incluida en esos valores.
La API utiliza la implementación estricta de struct tm que no contiene los campos adicionales tm_zone y tm_gmtoff, vistos habitualmente en GCC. Para la coherencia entre las bibliotecas C++ del host y la SPU, es necesaria la implementación estricta. La API proporciona funciones para conversiones entre struct tm y los tipos de datos Date y Timestamp de Netezza Performance Server. Como struct tm utiliza más campos de los necesarios para almacenar información de Date o Timestamp, la conversión omite varios campos. La siguiente tabla enumera las correspondencias entre los campos tm y sus equivalentes de tipo de datos Netezza Performance Server.
| Campos de struct tm | Datos utilizados por NZ DATE | Datos utilizados por NZ TIMESTAMP |
|---|---|---|
| tm_sec (0 - 61) | Se pasa por alto | Segundos (0 - 59) |
| tm_min (0 - 59) | Se pasa por alto | Minutos |
| tm_hour (0 - 23) | Se pasa por alto | Horas |
| tm_mday (1 - 31) día del mes | Día | Día |
| tm_mon (0 - 11) meses desde enero | Mes | Mes |
| tm_year desde 1900 | Año | Año |
| tm_wday (0 - 6) día de la semana | Día de la semana | Día de la semana |
| tm_yday (0 - 365) día del año | Día del año | Día del año |
| tm_isdst distintivo del horario de verano | Establecido en -1 | Establecido en -1 |
Para las conversiones a y desde struct tm, Netezza Performance Server no utiliza ni admite segundos intercalares. Por lo tanto, los campos de segundos de struct tm grabados por la API nunca superan los 59. Si la rutina de conversión se llama con un struct tm que contiene 60 o 61 campos tm_sec, la API genera un error.
Cuando está codificando desde un formato struct tm, los campos omitidos pueden contener datos. Cuando está descodificando desde un struct tm, los campos omitidos tienen un valor de cero.
El distintivo tm_isdst se omite en la entrada y se establece en -1 para 'desconocido' en la salida. Establecer tm_isdst en -1 no se ajusta al estándar, pero es una práctica habitual del sector. En todos los demás aspectos, la API cumple con todas las especificaciones de time_t enumeradas en el estándar de C++ de ANSI.