Prise en charge des structures temporelles struct tm

Outre la prise en charge de time_t, l'API d'aide aux types de données prend également en charge la structure commune C++ struct tm. Les valeurs de date et d'horodatage peuvent être converties en tm ; en revanche, les valeurs de temps et de TimeTz ne peuvent pas l'être car elles ne contiennent pas d'informations sur la date.

L'API utilise l'implémentation stricte de la structure tm qui ne contient pas les champs supplémentaires tm_zone et tm_gmtoff, couramment utilisés dans GCC. L'implémentation stricte est nécessaire pour assurer la cohérence entre les bibliothèques C++ de l'hôte et du SPU. L'API fournit des fonctions de conversion entre struct tm et les types de données Netezza Performance Server Date et Timestamp. Comme la structure tm utilise plus de champs qu'il n'en faut pour stocker des informations sur la date ou l'horodatage, plusieurs champs sont ignorés par la conversion. Le tableau suivant répertorie les correspondances entre les champs tm et leurs équivalents de type de données Netezza Performance Server

Tableau 1. Exemples de propriétés des types de données struct tm et Netezza Performance Server
champs struct tm Données utilisées par NZ DATE Données utilisées par NZ TIMESTAMP
tm_sec (0 - 61) Ignorée Secondes (0 - 59)
tm_min (0 - 59) Ignorée Compte-rendu de réunion
tm_hour (0 - 23) Ignorée Heures
tm_mday (1 - 31) jour du mois Jour Jour
tm_mon (0 - 11) mois depuis janvier Mois Mois
tm_year depuis 1900 Année Année
tm_wday (0 - 6) jour de la semaine Jour de la semaine Jour de la semaine
tm_yday (0 - 365) jour de l'année Année Jour Année Jour
tm_isdst drapeau de l'heure d'été Fixé à -1 Fixé à -1

Pour les conversions de et vers struct tm, Netezza Performance Server n'utilise ni ne prend en charge les secondes intercalaires. Ainsi, les champs seconds de la structure tm qui sont écrits par l'API ne dépassent jamais 59. Si une routine de conversion est appelée avec une structure tm contenant un champ tm_sec de 60 ou 61, l'API génère une erreur.

Lorsque vous encodez à partir d'un format struct tm, les champs ignorés peuvent contenir n'importe quelles données. Lorsque vous décodez vers une structure tm, les champs ignorés ont une valeur de zéro.

L'indicateur tm_isdst est ignoré à l'entrée et prend la valeur -1 pour "inconnu" à la sortie. Fixer tm_isdst à -1 n'est pas conforme à la norme, mais c'est une pratique courante dans l'industrie. Pour le reste, l'API est conforme à toutes les spécifications des time_t énumérées dans la norme ANSI C++.