diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 4b9d0f15e6dd5b7a291c10e3d9e5b32b6bd15f8a..f02dee4dd849eda7efa9c6ce8996d3ffc8f7f273 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.70 2002/08/04 06:44:47 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.71 2002/09/03 19:41:28 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -337,45 +337,32 @@ date_timestamptz(PG_FUNCTION_ARGS)
 	TimestampTz result;
 	struct tm	tt,
 			   *tm = &tt;
-	time_t		utime;
 
-	j2date((dateVal + date2j(2000, 1, 1)), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
+	j2date((dateVal + date2j(2000, 1, 1)),
+		   &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
 
 	if (IS_VALID_UTIME(tm->tm_year, tm->tm_mon, tm->tm_mday))
 	{
-#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE)
+		int		tz;
+
 		tm->tm_hour = 0;
 		tm->tm_min = 0;
 		tm->tm_sec = 0;
-		tm->tm_isdst = -1;
-
-		tm->tm_year -= 1900;
-		tm->tm_mon -= 1;
-		utime = mktime(tm);
-		if (utime == -1)
-			elog(ERROR, "Unable to convert date to tm");
+		tz = DetermineLocalTimeZone(tm);
 
 #ifdef HAVE_INT64_TIMESTAMP
-		result = ((utime * INT64CONST(1000000))
-				  + ((date2j(1970, 1, 1) - date2j(2000, 1, 1)) * INT64CONST(86400000000)));
-#else
-		result = utime + ((date2j(1970, 1, 1) - date2j(2000, 1, 1)) * 86400.0);
-#endif
-#else
-#ifdef HAVE_INT64_TIMESTAMP
-		result = ((dateVal * INT64CONST(86400000000))
-			+ (CTimeZone * INT64CONST(1000000)));
+		result = (dateVal * INT64CONST(86400000000))
+			+ (tz * INT64CONST(1000000));
 #else
-		result = dateVal * 86400.0 + CTimeZone;
-#endif
+		result = dateVal * 86400.0 + tz;
 #endif
 	}
 	else
 	{
+		/* Outside of range for timezone support, so assume UTC */
 #ifdef HAVE_INT64_TIMESTAMP
 		result = (dateVal * INT64CONST(86400000000));
 #else
-		/* Outside of range for timezone support, so assume UTC */
 		result = dateVal * 86400.0;
 #endif
 	}