diff --git a/src/backend/utils/adt/datetimes.c b/src/backend/utils/adt/datetimes.c index b6207be263c..0650169dcc7 100644 --- a/src/backend/utils/adt/datetimes.c +++ b/src/backend/utils/adt/datetimes.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/datetimes.c,v 1.1.1.1 1996/07/09 06:22:03 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/datetimes.c,v 1.2 1996/07/19 07:19:56 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -57,11 +57,15 @@ date_in(char *datestr) int4 result; DateADT *date = (DateADT*)&result; +#if 0 #ifdef USE_SHORT_YEAR #define CHECK_DATE_LEN(datestr) (strlen(datestr) >= 8) #else #define CHECK_DATE_LEN(datestr) (strlen(datestr) == 10) #endif /* USE_SHORT_YEAR */ +#else +#define CHECK_DATE_LEN(datestr) 1 +#endif #ifdef AMERICAN_STYLE if (!CHECK_DATE_LEN(datestr) || @@ -76,6 +80,8 @@ date_in(char *datestr) datestr); } #endif + if (y < 0 || y > 32767) + elog(WARN, "date_in: year must be limited to values 0 through 32767 in \"%s\"", datestr); if (m < 1 || m > 12) elog(WARN, "date_in: month must be limited to values 1 through 12 in \"%s\"", datestr); if (d < 1 || d > day_tab[isleap(y)][m-1]) @@ -247,16 +253,19 @@ time_in(char *timestr) TimeADT *time; if (sscanf(timestr, "%d%*c%d%*c%f", &h, &m, &sec) != 3) { - elog(WARN, "time_in: time \"%s\" not of the form hh:mm:ss", - timestr); + sec = 0.0; + if (sscanf(timestr, "%d%*c%d", &h, &m) != 2) { + elog(WARN, "time_in: time \"%s\" not of the form hh:mm:ss", + timestr); + } } if (h < 0 || h > 23) elog(WARN, "time_in: hour must be limited to values 0 through 23 in \"%s\"", timestr); if (m < 0 || m > 59) elog(WARN, "time_in: minute must be limited to values 0 through 59 in \"%s\"", timestr); - if (sec < 0 || sec >= 62.0) - elog(WARN, "time_in: second must be limited to values 0 through 61.99 in \"%s\"", timestr); + if (sec < 0 || sec >= 60.0) + elog(WARN, "time_in: second must be limited to values 0 through 59.999 in \"%s\"", timestr); time = (TimeADT*)palloc(sizeof(TimeADT)); time->hr = h; @@ -268,10 +277,24 @@ time_in(char *timestr) char * time_out(TimeADT *time) { - char *timestr = palloc(16); - - sprintf(timestr, "%02d:%02d:%09.6f", - (int)time->hr, (int)time->min, time->sec); + char *timestr = palloc(32); + int n; + float f; + + if (time->sec == 0.0) { + sprintf(timestr, "%02d:%02d", + (int)time->hr, (int)time->min); + } else { + n = (int)time->sec; + f = (float)n; + if (f == time->sec) { + sprintf(timestr, "%02d:%02d:%02d", + (int)time->hr, (int)time->min, n); + } else { + sprintf(timestr, "%02d:%02d:%09.6f", + (int)time->hr, (int)time->min, time->sec); + } + } return timestr; }