diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index df43b418ab..641dff80e0 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 *)×tamp); + time = localtime((time_t *)×tamp); 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 0e87267980..680566d6a3 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);