Re: [BUGS] Date calc bug

Поиск
Список
Период
Сортировка
От Thomas Lockhart
Тема Re: [BUGS] Date calc bug
Дата
Msg-id 3871AB34.5ACE74C7@alumni.caltech.edu
обсуждение исходный текст
Ответ на Re: [BUGS] Date calc bug  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: [BUGS] Date calc bug  (Olivier PRENANT <ohp@pyrenet.fr>)
Список pgsql-hackers
> 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*** ../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
fewerdays, 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;

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Don Baccus
Дата:
Сообщение: Re: [HACKERS] Inprise/Borland releasing Interbase as Open source
Следующее
От: Jose Soares
Дата:
Сообщение: Re: [HACKERS] Inprise/Borland releasing Interbase as Opensource