2016-06-02 8 views
0

Meine lokale Zeitzone ist EDT. Ich habe einen Zeitstempel: 29 Aug 2003 04:18:52, den ich mit mktime() in einen time_t-Wert konvertiert habe, wobei tm_isdst auf -1 gesetzt wurde. Der time_t-Wert ist 1062145132. Wenn ich gmtime() mit diesem Wert ausführen, bekomme ich 29 Aug 2003 09:18:52. Betrachtet man die von gmtime() zurückgegebene Struktur tm, so ist der Wert von tm_isdst 1. Warum ist diesmal nicht 08:18:52? Soll gmtime nicht mit UTC gleichgesetzt werden, ohne Abhängigkeit von Tageslichtabhängigkeit?Wird gmtime() von der Sommerzeit beeinflusst?

ich bash verwendet haben, wie folgt:

date [email protected] 
Fri Aug 29 04:18:52 EDT 2003 
TZ=UTC date [email protected] 
Fri Aug 29 08:18:52 UTC 2003 

Die oben zeigt die erwartete 4 Stunden Differenz zwischen EDT und UTC. Warum zeigt gmtime() nicht den gleichen Unterschied?

Antwort

0

Ich habe mein Problem gefunden. Zwischen dem Anruf gmtime (& tmgmt) und der Ausgabe von asctime (& tmgmt) hatte ich einen Anruf an mktime (& tmgmt). Ich hatte nicht erkannt, dass mktime möglicherweise die Werte in der Struktur ändern würde, so dass die von mir ausgedruckten Werte nicht die von gmtime() zurückgegebenen waren.