Unterstützung für temporale struct tm-Strukturen

Die Datentyp-Helper-API unterstützt nicht nur 'time_t', sondern auch die allgemeine C++-Struktur 'struct tm'. Datums- und Zeitstempelwerte können in ein tm konvertiert werden, Zeit- und TimeTz jedoch nicht, da diese Werte keine Datumsinformationen enthalten.

Die API verwendet die strikte Implementierung von 'struct tm', die die zusätzlichen tm_zone- und tm_gmtoff-Felder, die in der Regel in GCC verwendet werden, nicht enthält. Die strikte Implementierung ist für die Konsistenz zwischen den Host- und den SPU-C++-Anweisungen notwendig. Die API bietet Funktionen für Konvertierungen zwischen struct tm und den Netezza Performance Server Datums- und Zeitstempel-Datentypen. Da 'struct tm' mehr Felder verwendet, als für die Speicherung von Datums- oder Zeitmarkeninformationen erforderlich sind, werden mehrere Felder bei der Konvertierung ignoriert. In der folgenden Tabelle sind die Zuordnungen zwischen tm-Feldern und ihren Netezza Performance Server aufgeführt.

Tabelle 1. Beispiele für struct tm und Netezza Performance Server
struct tm-Felder Von 'NZ DATE' verwendete Daten Von 'NZ TIMESTAMP' verwendete Daten
tm_sec (0-61) Ignoriert Sekunden (0-59)
tm_min (0-59) Ignoriert Minuten
tm_hour (0-23) Ignoriert Stunden
tm_mday (1-31) Tag_des_Monats Tag Tag
tm_mon (0-11) Monate_seit_Januar Monat Monat
tm_year Seit_1900 Jahr Jahr
tm_wday (0-6) Wochentag Wochentag Wochentag
tm_yday (0-365) Tag_des_Jahres Tag des Jahres Tag des Jahres
tm_isdst Sommerzeitflag Auf '-1' gesetzt Auf '-1' gesetzt

Für Konvertierungen in und aus struct tm verwendet oder unterstützt Netezza Performance Server keine Schaltsekunden. Daher überschreiten die Sekundenfelder von 'struct tm', die von der API ausgegeben werden, nie den Wert '59'. Wenn eine Konvertierungsroutine mit einer struct tm-Struktur aufgerufen wird, deren tm_sec-Feld den Wert '60' oder '61' enthält, löst die API einen Fehler aus.

Wenn Sie eine Codierung von einem struct tm-Format vornehmen, können ignorierte Felder beliebige Daten enthalten. Wenn Sie eine Decodierung in 'struct tm' vornehmen, haben die ignorierten Felder den Wert null.

Das Flag 'tm_isdst' wird bei der Eingabe ignoriert und bei der Ausgabe auf '-1' (für 'unbekannt') gesetzt. Das Setzen von 'tm_isdst' auf den Wert '-1' entspricht zwar nicht der Norm, stellt jedoch eine branchenübliche Praxis dar. Im allen übrigen Bereichen erfüllt die API alle time_t-Spezifikationen, die in der ANSI-C++-Norm aufgelistet sind.