1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
Message-ID: <3871AB34.5ACE74C7@alumni.caltech.edu>
Date: Tue, 04 Jan 2000 08:11:32 +0000
From: Thomas Lockhart <lockhart@alumni.caltech.edu>
X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.0.36 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Tom Lane <tgl@sss.pgh.pa.us>, ohp@pyrenet.fr,
Tulassay Zsolt <zsolt@tek.bke.hu>
CC: pgsql-hackers@postgreSQL.org
Subject: [HACKERS] Re: [BUGS] Date calc bug
References: <Pine.UW2.4.21.0001021513050.11391-100000@server.pyrenet.fr> <21517.946836120@sss.pgh.pa.us>
Content-Type: multipart/mixed;
boundary="------------0D67EBB5BB25DC2D84AE64E5"
Sender: owner-pgsql-hackers@postgreSQL.org
This is a multi-part message in MIME format.
--------------0D67EBB5BB25DC2D84AE64E5
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
> forum=> select datetime(now())+'74565 days'::timespan as ido;
> Thu Jan 19 14:07:30 2068
and
> select '12-01-1999'::datetime + '@ 1 month - 1 sec' ;
> Thu Dec 30 23:59:59 1999 EST
I've repaired both problems in both the development and release trees.
Thanks for the reports and analysis. Patch enclosed...
- Thomas
--
Thomas Lockhart lockhart@alumni.caltech.edu
South Pasadena, California
--------------0D67EBB5BB25DC2D84AE64E5
Content-Type: text/plain; charset=us-ascii;
name="dt.c.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="dt.c.patch"
*** ../src/backend/utils/adt/dt.c.orig Mon Jan 3 08:27:24 2000
--- ../src/backend/utils/adt/dt.c Mon Jan 3 16:41:08 2000
***************
*** 787,792 ****
--- 787,793 ----
* To add a month, increment the month, and use the same day of month.
* Then, if the next month has fewer days, set the day of month
* to the last day of month.
+ * Lastly, add in the "quantitative time".
*/
DateTime *
datetime_pl_span(DateTime *datetime, TimeSpan *span)
***************
*** 815,826 ****
{
dt = (DATETIME_IS_RELATIVE(*datetime) ? SetDateTime(*datetime) : *datetime);
- #ifdef ROUND_ALL
- dt = JROUND(dt + span->time);
- #else
- dt += span->time;
- #endif
-
if (span->month != 0)
{
struct tm tt,
--- 816,821 ----
***************
*** 853,858 ****
--- 848,859 ----
DATETIME_INVALID(dt);
}
+ #ifdef ROUND_ALL
+ dt = JROUND(dt + span->time);
+ #else
+ dt += span->time;
+ #endif
+
*result = dt;
}
***************
*** 2441,2447 ****
tm2timespan(struct tm * tm, double fsec, TimeSpan *span)
{
span->month = ((tm->tm_year * 12) + tm->tm_mon);
! span->time = ((((((tm->tm_mday * 24) + tm->tm_hour) * 60) + tm->tm_min) * 60) + tm->tm_sec);
span->time = JROUND(span->time + fsec);
return 0;
--- 2442,2451 ----
tm2timespan(struct tm * tm, double fsec, TimeSpan *span)
{
span->month = ((tm->tm_year * 12) + tm->tm_mon);
! span->time = ((((((tm->tm_mday * 24.0)
! + tm->tm_hour) * 60.0)
! + tm->tm_min) * 60.0)
! + tm->tm_sec);
span->time = JROUND(span->time + fsec);
return 0;
--------------0D67EBB5BB25DC2D84AE64E5--
************
|