C++ Zeit time.h struct tm welche Sommerzeit?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die Struktur enthält erst einmal nur ein Datum und eine Zeit. Welche das ist hängt von der Funktion ab, welche Du aufgerufen hast, um den Wert zu erhalten.

DIGGER6 
Fragesteller
 08.05.2017, 13:10

Soweit ich das beobachtet habe enthält jeder Abruf zB tm_hour immer automatisch die richtige Zeit also Sommer/Winter ist immer korrekt für MEZ und MESZ. Der tm_isdst flag zeigt "The Daylight Saving Time flag (tm_isdst) is greater
than zero if Daylight Saving Time is in effect, zero if Daylight Saving
Time is not in effect, and less than zero if the information is not
available." Jetzt frage ich mich Wovon hängt der Zeitpunkt der Zeitumstellung ab? In USA, Russland etc ist die Sommerzeit immer etwas anderes daher würde ich gerne wissen ob zB tm_hour zB in einem anderen Land auch je nach Umstellzeitpunkt unterschiedlich ist?

0
ohwehohach  08.05.2017, 13:56
@DIGGER6

Naja, das Betriebssystem hat eine Culture-Info eingestellt. Und je nach den entsprechenden dort geltenden Regeln findet die Umrechnung von UTC in LocalTime statt.

1

Das hängt davon ab, welche Zeitzone hinterlegt ist. Bei UNIX Derivaten ist das die Zeitzone aus /etc/localtime.

gmtime() liefert dir die Uhrzeit in UTC, also absolut.

localtime() liefert dir die Uhrzeit, wie sie aktuell von deinen Locale-Einstellungen definiert wird. Also relativ mit Offset und Berücksichtigung der Sommer-/Winterzeit.

Übrigens ist das die alte C-API aus <ctime> und da es dir ja um C++ geht, solltest du dir mal den <chrono> Header angucken:

http://www.cplusplus.com/reference/chrono/

Basiert aber immer noch irgendwie alles auf time_t ... naja, gibt kaum eine ordentliche Zeit-API in den gängigen Programmiersprachen. Alles mehr oder weniger Pfusch. :)