From 17adf80b471efa7c6523ef39071c80b22a2ee3dd Mon Sep 17 00:00:00 2001
From: "Thomas G. Lockhart" <lockhart@fourpalms.org>
Date: Sat, 1 Jun 2002 15:52:15 +0000
Subject: [PATCH] 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.

---
 src/backend/utils/adt/date.c | 18 ++++++------------
 1 file 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);
-- 
GitLab