rem: T->tm_min -= t.timezone; T->tm_isdst = t.dstflag;
add: T->tm_min -= t.timezone - (t.dstflag != 0)*60; T->tm_isdst = 0;
context: soap_timegm(struct tm *T){#if defined(HAVE_TIMEGM)  return timegm(T);#elif defined(HAVE_GETTIMEOFDAY)  struct timezone t;  struct timeval tv;  gettimeofday(&tv, &t); /* doesn't work properly on Solaris */  T->tm_min -= t.tz_minuteswest;  T->tm_isdst = (t.tz_dsttime != 0);  return mktime(T);/* WR[ */  /* The following define was added for VxWorks*/#elif defined(HAVE_MKTIME)  /* FOR VXWORKS:  vxWorks does not seem to have any variable representation of time zones, but  timezone information can be set in INSTALL_DIR/target/h/private/timeP.h header  file, by setting the ZONEBUFFER define.  The ZONEBUFFER define follows this  format:    name_of_zone:<(unused)>:time_in_minutes_from_UTC:daylight_start:daylight_end  To calculate local time, the value of time_in_minutes_from_UTC is subtracted  from UTC; time_in_minutes_from_UTC must be positive. Daylight information is  expressed as mmddhh (month-day-hour), for example:    UTC::0:040102:100102  */  return mktime(T);/* ]WR */#elif defined(HAVE_FTIME)  struct timeb t;  t.timezone = 0;  t.dstflag = -1;  ftime(&t);  T->tm_min -= t.timezone;  T->tm_isdst = t.dstflag; /* doesn't work properly on Solaris */  return mktime(T);#else#warning "time_t (de)serialization is not MT safe on this platform"  time_t t;  char *tz = getenv("TZ");  putenv("TZ=UTC");  tzset();  t = mktime(T);  if (tz)  { char tmp[16];    strcpy(tmp, "TZ=");    strncat(tmp, tz, 12);    tmp[15] = '\0';    putenv(tmp);  }  else    putenv("TZ=");  tzset();  return t;#endif}