set the TZ environment variable to UTC, which is good because some systems
will fail to set it back afterwards. Instead we grab the offset from the
global 'timezone' variable and add it to tm_sec. mktime() will then
normalize the struct before converting to time_t. This fixes a bug on some
systems where the time zone would appear to spontaneously switch to UTC.
time_t t = 0;
struct tm tt;
char *c;
time_t t = 0;
struct tm tt;
char *c;
/** Skip day of week, to number */
for (c = buf; *c != ' '; c++)
/** Skip day of week, to number */
for (c = buf; *c != ' '; c++)
tt.tm_sec = atoi(c);
for (; *c && *c != ' '; c++);
tt.tm_sec = atoi(c);
for (; *c && *c != ' '; c++);
- /* Got everything; let's go */
- /* First, change to UTC */
- if (getenv("TZ"))
- snprintf(tz, 256, "TZ=%s", getenv("TZ"));
- else
- strcpy(tz, "TZ=");
- putenv("TZ=UTC");
+ /* Got everything; let's go. The global 'timezone' variable contains the
+ * local timezone's offset from UTC, in seconds, so we add that to tm_sec.
+ * This produces an illegal value for tm_sec, but mktime() will normalize
+ * it for us. This eliminates the need to temporarily switch the environment
+ * variable TZ to UTC, which is good because it fails to switch back on
+ * some systems.
+ */