]> granicus.if.org Git - postgresql/commitdiff
Missed another tar file... :(
authorMarc G. Fournier <scrappy@hub.org>
Fri, 14 Mar 1997 05:58:13 +0000 (05:58 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Fri, 14 Mar 1997 05:58:13 +0000 (05:58 +0000)
src/backend/utils/adt/timestamp.c [new file with mode: 0644]

diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
new file mode 100644 (file)
index 0000000..df43b41
--- /dev/null
@@ -0,0 +1,98 @@
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include "postgres.h"
+#include "utils/builtins.h"
+
+int4
+timestamp_in(char *timestamp_str)
+{
+    struct tm input_time;
+    int4 result;
+
+    memset(&input_time, 0, sizeof(input_time));
+    if(sscanf(timestamp_str, "%d%*c%d%*c%d%*c%d%*c%d%*c%d",
+             &input_time.tm_year, &input_time.tm_mon, &input_time.tm_mday,
+             &input_time.tm_hour, &input_time.tm_min, &input_time.tm_sec) != 6) {
+       elog(WARN, "timestamp_in: timestamp \"%s\" not of the form yyyy-mm-dd hh:mm:ss",
+            timestamp_str);
+    }
+
+    /* range checking?  bahahahaha.... */
+
+    input_time.tm_year -= 1900;
+    input_time.tm_mon -= 1;
+
+    /* use mktime(), but make this GMT, not local time */
+    result = mktime(&input_time);
+    result -= timezone;
+
+    return result;
+}
+
+char *
+timestamp_out(int4 timestamp)
+{
+    char *result;
+    struct tm *time;
+
+    time = gmtime((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,
+           time->tm_hour, time->tm_min, time->tm_sec);
+
+    return result;
+}
+
+int4
+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);
+}
+
+int4
+timestampeq(int4 t1, int4 t2)
+{
+    return t1 == t2;
+}
+
+int4
+timestampne(int4 t1, int4 t2)
+{
+    return t1 != t2;
+}
+
+int4
+timestamplt(int4 t1, int4 t2)
+{
+    return t1 < t2;
+}
+
+int4
+timestampgt(int4 t1, int4 t2)
+{
+    return t1 > t2;
+}
+
+int4
+timestample(int4 t1, int4 t2)
+{
+    return t1 <= t2;
+}
+
+int4
+timestampge(int4 t1, int4 t2)
+{
+    return t1 >= t2;
+}