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.

Tabla 1. Ejemplos de propiedades de los tipos de datos struct tm y ' 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.