diff options
author | Thomas G. Lockhart <lockhart@fourpalms.org> | 2002-06-01 15:52:15 +0000 |
---|---|---|
committer | Thomas G. Lockhart <lockhart@fourpalms.org> | 2002-06-01 15:52:15 +0000 |
commit | 17adf80b471efa7c6523ef39071c80b22a2ee3dd (patch) | |
tree | 40548998d3d04becf51a8afcffaac616f5e10aba | |
parent | 606db06f83f442b4a20b2f770c9bd3811c33589b (diff) | |
download | postgresql-17adf80b471efa7c6523ef39071c80b22a2ee3dd.tar.gz postgresql-17adf80b471efa7c6523ef39071c80b22a2ee3dd.zip |
Fix timestamp to date conversion for the case where timestamp uses a double
precision storage format. Previously applied the same math as used for the
64-bit integer storage format case, which was wrong.
Problem introduced recently when the 64-bit storage format was
implemented.
-rw-r--r-- | src/backend/utils/adt/date.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index ab8403cc318..eac2371040f 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.66 2002/04/21 19:48:12 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.67 2002/06/01 15:52:15 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -308,22 +308,16 @@ timestamp_date(PG_FUNCTION_ARGS) { Timestamp timestamp = PG_GETARG_TIMESTAMP(0); DateADT result; -#if 0 - struct tm tt, - *tm = &tt; - fsec_t fsec; -#endif if (TIMESTAMP_NOT_FINITE(timestamp)) PG_RETURN_NULL(); -#if 0 - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) - elog(ERROR, "Unable to convert timestamp to date"); - - result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1); -#else +#ifdef HAVE_INT64_TIMESTAMP + /* Microseconds to days */ result = (timestamp / INT64CONST(86400000000)); +#else + /* Seconds to days */ + result = (timestamp / 86400.0); #endif PG_RETURN_DATEADT(result); |