From 313ed1ed9498f977262e180a080c7748197ced5c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 9 Oct 2005 17:21:47 +0000 Subject: Fix (hopefully for the last time) problems with datetime values displaying like '23:59:60' because of fractional-second roundoff problems. Trying to control this upstream of the actual display code was hopeless; the right way is to explicitly round fractional seconds in the display code and then refigure the results if the fraction rounds up to 1. Per bug #1927. --- src/backend/utils/adt/datetime.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/backend/utils/adt/datetime.c') diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 9e5be7d4cff..74dda5441f1 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.157 2005/07/23 14:25:33 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.158 2005/10/09 17:21:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3488,8 +3488,8 @@ EncodeTimeOnly(struct pg_tm *tm, fsec_t fsec, int *tzp, int style, char *str) sprintf(str, "%02d:%02d", tm->tm_hour, tm->tm_min); /* - * Print fractional seconds if any. The field widths here should be - * at least equal to the larger of MAX_TIME_PRECISION and + * Print fractional seconds if any. The fractional field widths + * here should be equal to the larger of MAX_TIME_PRECISION and * MAX_TIMESTAMP_PRECISION. */ if (fsec != 0) @@ -3497,7 +3497,7 @@ EncodeTimeOnly(struct pg_tm *tm, fsec_t fsec, int *tzp, int style, char *str) #ifdef HAVE_INT64_TIMESTAMP sprintf(str + strlen(str), ":%02d.%06d", tm->tm_sec, fsec); #else - sprintf(str + strlen(str), ":%012.9f", tm->tm_sec + fsec); + sprintf(str + strlen(str), ":%013.10f", tm->tm_sec + fsec); #endif TrimTrailingZeros(str); } -- cgit v1.2.3