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
| 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++.