Herakles
Profifragensteller
Moin!
Ich schlage mich seit einige Zeit mit dem Problem herum, dass ich eine in lokaler Zeit (also CET) ausgedrücktes struct tm habe und dieses konvertieten möchte auf New Yorker Zeit. Ich habe mir dazu ein kleines Programm geschrieben:
Der Output ist aber folgender:
Wieso sind die Zeiten nicht unterschiedlich und wie wird es richtig gemacht?
Viele Grüße
Herakles
Ich schlage mich seit einige Zeit mit dem Problem herum, dass ich eine in lokaler Zeit (also CET) ausgedrücktes struct tm habe und dieses konvertieten möchte auf New Yorker Zeit. Ich habe mir dazu ein kleines Programm geschrieben:
Code:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
struct tm deutsche_zeit, new_yorker_zeit;
time_t utc;
memset(&deutsche_zeit, 0, sizeof(struct tm));
memset(&new_yorker_zeit, 0, sizeof(struct tm));
// setze irgendein datum mit daylight saving time
deutsche_zeit.tm_sec = 1;
deutsche_zeit.tm_min = 1;
deutsche_zeit.tm_hour = 1;
deutsche_zeit.tm_mday = 6;
deutsche_zeit.tm_mon = 6;
// in das tm_year-feld muessen die anzahl der jahre seit 1900 rein
deutsche_zeit.tm_year = 2013 - 1900;
deutsche_zeit.tm_isdst = 1;
// lege fest, dass wir in der berliner zeitzone sind
setenv( "TZ", "CET-1CEST", 1 );
tzset();
// konvertiere die lokale uhrzeit zu UTC
utc = timegm( &deutsche_zeit );
// erst DANACH wollen wir die zeit aber in new-yorker zeit dargestellt wissen
setenv( "TZ", "EST5EDT", 1 );
tzset();
localtime_r( &utc, &new_yorker_zeit );
printf("deutsch: %snew_york: %s",asctime(&deutsche_zeit), asctime(&new_yorker_zeit));
return 0;
}
Der Output ist aber folgender:
deutsch: Sat Jul 6 01:01:01 2013
new_york: Sat Jul 6 01:01:01 2013
Wieso sind die Zeiten nicht unterschiedlich und wie wird es richtig gemacht?
Viele Grüße
Herakles