- ret_time->utc_hour = (ret_time->utc_east ? (-(timezone)) / 3600 :
- timezone / 3600);
- ret_time->utc_minute = (ret_time->utc_east ? (-(timezone)) % 3600 :
- timezone % 3600);
-#endif /* HAVE_TZSET */
+ ctz = timezone;
+ if (ret_time->dst)
+ ctz -= 3600;
+#elif defined(HAVE_TM_GMTOFF)
+ ret_time->utc_east = t->tm_gmtoff > 0 ? 1 : 0;
+ ctz = -t->tm_gmtoff;
+#elif defined(HAVE___TM_GMTOFF)
+ ret_time->utc_east = t->__tm_gmtoff > 0 ? 1 : 0;
+ ctz = -t->__tm_gmtoff;
+#elif defined(HAVE___TM_GMTOFF__)
+ ret_time->utc_east = t->__tm_gmtoff__ > 0 ? 1 : 0;
+ ctz = -t->__tm_gmtoff__;
+#endif /* HAVE_TIMEZONE */
+
+ ret_time->utc_hour = (ret_time->utc_east ? (-(ctz)) / 3600 : ctz / 3600);
+ ret_time->utc_minute = (ret_time->utc_east ? (-(ctz)) % 3600 : ctz % 3600);