diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index df43b418ab9ed58cc733f7800fa5c78045c9f379..641dff80e0924610aa3d4be8742cba210bfb9390 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -4,8 +4,8 @@
 #include "postgres.h"
 #include "utils/builtins.h"
 
-int4
-timestamp_in(char *timestamp_str)
+time_t
+timestamp_in(const char *timestamp_str)
 {
     struct tm input_time;
     int4 result;
@@ -25,18 +25,17 @@ timestamp_in(char *timestamp_str)
 
     /* use mktime(), but make this GMT, not local time */
     result = mktime(&input_time);
-    result -= timezone;
 
     return result;
 }
 
 char *
-timestamp_out(int4 timestamp)
+timestamp_out(time_t timestamp)
 {
     char *result;
     struct tm *time;
 
-    time = gmtime((time_t *)&timestamp);
+    time = localtime((time_t *)&timestamp);
     result = palloc(20);
     sprintf(result, "%04d-%02d-%02d %02d:%02d:%02d",
 	    time->tm_year+1900, time->tm_mon+1, time->tm_mday,
@@ -45,54 +44,47 @@ timestamp_out(int4 timestamp)
     return result;
 }
 
-int4
+time_t
 now(void)
 {
-    struct tm ignore;
     time_t sec;
 
-    /* we want the local time here.  but 'timezone' doesn't get set */
-    /* until we do a mktime().  so do one.                          */
-    memset(&ignore, 0, sizeof(ignore));
-    mktime(&ignore);
-
     time(&sec);
-    sec -= timezone;
-    return((int4)sec);
+    return(sec);
 }
 
-int4
-timestampeq(int4 t1, int4 t2)
+bool
+timestampeq(time_t t1, time_t t2)
 {
-    return t1 == t2;
+    return difftime(t1, t2) == 0;
 }
 
-int4
-timestampne(int4 t1, int4 t2)
+bool
+timestampne(time_t t1, time_t t2)
 {
-    return t1 != t2;
+    return difftime(t1, t2) != 0;
 }
 
-int4
-timestamplt(int4 t1, int4 t2)
+bool
+timestamplt(time_t t1, time_t t2)
 {
-    return t1 < t2;
+    return difftime(t1, t2) > 0;
 }
 
-int4
-timestampgt(int4 t1, int4 t2)
+bool
+timestampgt(time_t t1, time_t t2)
 {
-    return t1 > t2;
+    return difftime(t1, t2) < 0;
 }
 
-int4
-timestample(int4 t1, int4 t2)
+bool
+timestample(time_t t1, time_t t2)
 {
-    return t1 <= t2;
+    return difftime(t1, t2) >= 0;
 }
 
-int4
-timestampge(int4 t1, int4 t2)
+bool
+timestampge(time_t t1, time_t t2)
 {
-    return t1 >= t2;
+    return difftime(t1, t2) <= 0;
 }
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 0e87267980ede4757fe1c5adbd922b3757edb8d8..680566d6a38520d25750823410a30de20759d172 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.12 1997/03/14 23:33:18 scrappy Exp $
+ * $Id: builtins.h,v 1.13 1997/03/25 09:25:33 scrappy Exp $
  *
  * NOTES
  *    This should normally only be included by fmgr.h.
@@ -407,15 +407,15 @@ extern ItemPointer tidin(char *str);
 extern char *tidout(ItemPointer itemPtr);
 
 /* timestamp.c */
-extern int4 timestamp_in(char *timestamp_str);
-extern char *timestamp_out(int4 timestamp);
-extern int4 now(void);
-int4 timestampeq(int4 t1, int4 t2);
-int4 timestampne(int4 t1, int4 t2);
-int4 timestamplt(int4 t1, int4 t2);
-int4 timestampgt(int4 t1, int4 t2);
-int4 timestample(int4 t1, int4 t2);
-int4 timestampge(int4 t1, int4 t2);
+extern time_t timestamp_in(const char *timestamp_str);
+extern char *timestamp_out(time_t timestamp);
+extern time_t now(void);
+bool timestampeq(time_t t1, time_t t2);
+bool timestampne(time_t t1, time_t t2);
+bool timestamplt(time_t t1, time_t t2);
+bool timestampgt(time_t t1, time_t t2);
+bool timestample(time_t t1, time_t t2);
+bool timestampge(time_t t1, time_t t2);
 
 /* varchar.c */
 extern char *bpcharin(char *s, int dummy, int typlen);