2010-12-14 2 views

Antwort

0

Die POSIX-Möglichkeit, Zeitzoneninformationen zu verarbeiten, besteht offenbar darin, die Umgebungsvariable TZ zu setzen. Daher habe ich gewählt TZ mit dem Benutzer angegebene Zeitzone mit den Zeitfunktionen vor der Arbeit zu setzen:

/* Get actual time */ 
time(&now); 

/* Backup time zone */ 
old_tz = getenv("TZ"); 

/* Set user time zone */ 
setenv("TZ", zone_s, 1); 

/* Get time components in user timezone */ 
comptime = localtime(&now); 

/* Set time */ 
sscanf(time_string, "%d:%d", &x, &y)); 
comptime->tm_hour = x; 
comptime->tm_min = y; 
comptime->tm_sec = 0; 

/* Set date */ 
sscanf(date_string, "%d-%d-%d", &x, &y, &z); 
comptime->tm_year = x-1900; 
comptime->tm_mon = y-1; 
comptime->tm_mday = z; 

/* Restore time zone */ 
setenv("TZ", old_tz, 1); 

Cheers,

Martin.

0

Das einzige, was ich mir vorstellen kann, ist die Zeichenfolge zu kopieren, suchen und ersetzen Sie die UTC-Offset mit einer Null, beide Male analysieren und einen Unterschied mit difftime(...).

Es ist wahrscheinlich eine clevere Technik da draußen, aber im Moment habe ich keinen Kaffee.

+0

Das einzige Problem ist, dass Sie eine Datumszeit time_t haben müssen, um den Zeitunterschied zu erhalten. Es ist jedoch nicht möglich, eine Datetime-Zeichenfolge mit einem UTC-Offset zu analysieren - zumindest nicht mit POSIX, oder? –