summaryrefslogtreecommitdiff
path: root/contrib/datetime/datetime_functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/datetime/datetime_functions.c')
-rw-r--r--contrib/datetime/datetime_functions.c281
1 files changed, 0 insertions, 281 deletions
diff --git a/contrib/datetime/datetime_functions.c b/contrib/datetime/datetime_functions.c
index ca9c8afe35e..e69de29bb2d 100644
--- a/contrib/datetime/datetime_functions.c
+++ b/contrib/datetime/datetime_functions.c
@@ -1,281 +0,0 @@
-/*
- * datetime_functions.c --
- *
- * This file defines new functions for the time and date data types.
- *
- * Copyright (C) 1999, Massimo Dal Zotto <dz@cs.unitn.it>
- *
- * Date2mjd code contributed by Reiner Dassing <dassing@wettzell.ifag.de>
- *
- * This software is distributed under the GNU General Public License
- * either version 2, or (at your option) any later version.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#ifdef HAVE_FLOAT_H
-#include <float.h>
-#endif
-
-#include "postgres.h"
-#include "miscadmin.h"
-#include "utils/builtins.h"
-#include "utils/nabstime.h"
-#include "utils/datetime.h"
-#include "access/xact.h"
-
-#include "datetime_functions.h"
-
-/* Constant to replace calls to date2j(2000,1,1) */
-#define JDATE_2000 2451545
-
-/*
- * decode_24h_time()
- *
- * Decode time string 00:00:00 through 24:00:00.
- */
-static int
-decode_24h_time(char *str, struct tm * tm, double *fsec)
-{
- char *cp;
-
- tm->tm_hour = strtol(str, &cp, 10);
- if (*cp != ':')
- return -1;
- str = cp + 1;
- tm->tm_min = strtol(str, &cp, 10);
- if (*cp == '\0')
- {
- tm->tm_sec = 0;
- *fsec = 0;
- }
- else if (*cp != ':')
- return -1;
- else
- {
- str = cp + 1;
- tm->tm_sec = strtol(str, &cp, 10);
- if (*cp == '\0')
- *fsec = 0;
- else if (*cp == '.')
- {
- str = cp;
- *fsec = strtod(str, &cp);
- if (cp == str)
- return -1;
- }
- else
- return -1;
- }
-
- /* do a sanity check */
- if ((tm->tm_hour < 0) || (tm->tm_hour > 24)
- || (tm->tm_min < 0) || (tm->tm_min > 59)
- || (tm->tm_sec < 0) || (tm->tm_sec > 59)
- || (*fsec < 0))
- return -1;
-
- return 0;
-}
-
-/*
- * A modified version of time_in which allows the value 24:00:00 for
- * time and converts it to TimeADT data type forcing seconds to 0.
- * This can be useful if you need to handle TimeADT values limited
- * to hh:mm like in timetables.
- */
-
-TimeADT *
-hhmm_in(char *str)
-{
- TimeADT *time;
-
- double fsec;
- struct tm tt,
- *tm = &tt;
-
- if (!PointerIsValid(str))
- elog(ERROR, "Bad (null) time external representation");
-
- if (decode_24h_time(str, tm, &fsec) != 0)
- elog(ERROR, "Bad time external representation '%s'", str);
-
- if ((tm->tm_hour < 0) || (tm->tm_hour > 24)
- || ((tm->tm_hour == 24)
- && ((tm->tm_min != 0) || (tm->tm_sec != 0) || (fsec != 0.0))))
- {
- elog(ERROR,
- "Time must be limited to values 00:00:00 through 24:00:00 "
- "in \"%s\"",
- str);
- }
-
- time = palloc(sizeof(TimeADT));
- *time = ((((tm->tm_hour * 60) + tm->tm_min) * 60));
-
- return (time);
-}
-
-/*
- * A modified version of time_out which converts from TimeADT data type
- * omitting the seconds field when it is 0.
- * Useful if you need to handle TimeADT values limited to hh:mm.
- */
-
-char *
-hhmm_out(TimeADT *time)
-{
- char *result;
- struct tm tt,
- *tm = &tt;
- char buf[MAXDATELEN + 1];
-
- if (!PointerIsValid(time))
- return NULL;
-
- tm->tm_hour = (*time / (60 * 60));
- tm->tm_min = (((int) (*time / 60)) % 60);
- tm->tm_sec = (((int) *time) % 60);
-
- if (tm->tm_sec == 0)
- sprintf(buf, "%02d:%02d", tm->tm_hour, tm->tm_min);
- else
- sprintf(buf, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
-
- result = palloc(strlen(buf) + 1);
- strcpy(result, buf);
-
- return (result);
-}
-
-TimeADT *
-hhmm(TimeADT *time)
-{
- TimeADT *result = palloc(sizeof(TimeADT));
-
- *result = (((int) *time) / 60 * 60);
-
- return (result);
-}
-
-TimeADT *
-time_difference(TimeADT *time1, TimeADT *time2)
-{
- TimeADT *time = palloc(sizeof(TimeADT));
-
- *time = (*time1 - *time2);
- return (time);
-}
-
-int4
-time_hours(TimeADT *time)
-{
- return (((int) *time) / 3600);
-}
-
-int4
-time_minutes(TimeADT *time)
-{
- return ((((int) *time) / 60) % 60);
-}
-
-int4
-time_seconds(TimeADT *time)
-{
- return (((int) *time) % 60);
-}
-
-int4
-as_minutes(TimeADT *time)
-{
- return (((int) *time) / 60);
-}
-
-int4
-as_seconds(TimeADT *time)
-{
- return ((int) *time);
-}
-
-int4
-date_day(DateADT val)
-{
- int year,
- month,
- day;
-
- j2date(val + JDATE_2000, &year, &month, &day);
-
- return (day);
-}
-
-int4
-date_month(DateADT val)
-{
- int year,
- month,
- day;
-
- j2date(val + JDATE_2000, &year, &month, &day);
-
- return (month);
-}
-
-int4
-date_year(DateADT val)
-{
- int year,
- month,
- day;
-
- j2date(val + JDATE_2000, &year, &month, &day);
-
- return (year);
-}
-
-TimeADT *
-currenttime()
-{
- TimeADT *result = palloc(sizeof(TimeADT));
- struct tm *tm;
- time_t current_time;
-
- current_time = time(NULL);
- tm = localtime(&current_time);
- *result = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec);
-
- return (result);
-}
-
-DateADT
-currentdate()
-{
- DateADT date;
- struct tm tt,
- *tm = &tt;
-
- GetCurrentTime(tm);
- date = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - JDATE_2000);
- return (date);
-}
-
-int4
-date2mjd(DateADT val)
-{
- int result;
-
- result = val + JDATE_2000 - 2400000.5;
-
- return result;
-}
-
-/* end of file */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-basic-offset: 4
- * End:
- */