diff options
author | Marc G. Fournier <scrappy@hub.org> | 1996-08-18 22:14:33 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1996-08-18 22:14:33 +0000 |
commit | 9848d3655d44aa2e58d28fe9f93a94b2934eedc8 (patch) | |
tree | 059111c2156111b083ea668b84bc8b3481676fca /contrib/datetime/datetime_functions.c | |
parent | 1960a3b96573ad1ec73cd50255edde29cc80df88 (diff) | |
download | postgresql-9848d3655d44aa2e58d28fe9f93a94b2934eedc8.tar.gz postgresql-9848d3655d44aa2e58d28fe9f93a94b2934eedc8.zip |
Support Docs & Contrib
Diffstat (limited to 'contrib/datetime/datetime_functions.c')
-rw-r--r-- | contrib/datetime/datetime_functions.c | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/contrib/datetime/datetime_functions.c b/contrib/datetime/datetime_functions.c new file mode 100644 index 00000000000..dc1fec8bd20 --- /dev/null +++ b/contrib/datetime/datetime_functions.c @@ -0,0 +1,147 @@ +/* + * datetime_functions.c -- + * + * This file defines new functions for the time and date data types. + * + * Copyright (c) 1996, Massimo Dal Zotto <dz@cs.unitn.it> + */ + +#include <time.h> + +#include "postgres.h" +#include "pg_type.h" +#include "utils/palloc.h" + +typedef struct DateADT { + char day; + char month; + short year; +} DateADT; + +typedef struct TimeADT { + short hr; + short min; + float sec; +} TimeADT; + +TimeADT * +time_difference(TimeADT *time1, TimeADT *time2) +{ + TimeADT *time = (TimeADT*)palloc(sizeof(TimeADT)); + + time->sec = time1->sec - time2->sec; + time->min = time1->min - time2->min; + time->hr = time1->hr - time2->hr; + + if (time->sec < 0) { + time->sec += 60.0; + time->min--; + } else if (time->sec >= 60.0) { + time->sec -= 60.0; + time->min++; + } + + if (time->min < 0) { + time->min += 60; + time->hr--; + } else if (time->min >= 60) { + time->min -= 60; + time->hr++; + } + + if (time->hr < 0) { + time->hr += 24; + } else if (time->hr >= 24) { + time->hr -= 24; + } + + return (time); +} + +TimeADT * +currentTime() +{ + time_t current_time; + struct tm *tm; + TimeADT *result = (TimeADT*)palloc(sizeof(TimeADT)); + + current_time = time(NULL); + tm = localtime(¤t_time); + result->sec = tm->tm_sec; + result->min = tm->tm_min; + result->hr = tm->tm_hour; + + return (result); +} + +int4 +currentDate() +{ + time_t current_time; + struct tm *tm; + int4 result; + DateADT *date = (DateADT*)&result; + + current_time = time(NULL); + tm = localtime(¤t_time); + date->day = tm->tm_mday; + date->month = tm->tm_mon+1; + date->year = tm->tm_year+1900; + + return (result); +} + +int4 +hours(TimeADT *time) +{ + return (time->hr); +} + +int4 +minutes(TimeADT *time) +{ + return (time->min); +} + +int4 +seconds(TimeADT *time) +{ + int seconds = (int)time->sec; + return (seconds); +} + +int4 +day(int4 val) +{ + DateADT *date = (DateADT*)&val; + return (date->day); +} + +int4 +month(int4 val) +{ + DateADT *date = (DateADT*)&val; + return (date->month); +} + +int4 +year(int4 val) +{ + DateADT *date = (DateADT*)&val; + return (date->year); +} + +int4 +asMinutes(TimeADT *time) +{ + int seconds = (int)time->sec; + return (time->min + 60*time->hr); +} + +int4 +asSeconds(TimeADT *time) +{ + int seconds = (int)time->sec; + return (seconds + 60*time->min + 3600*time->hr); +} + |